第一题
1. 使用malloc系统调用分配的内存是在什么上分配的?
A:栈
B:堆
答案及解析 B
malloc开辟的空间都是在堆上申请的内存空间,但是我们平常定义的定长数组之类的,都是在栈上开辟的空间;
第二题
2. C语言中,在头文件正常引用的情况下,执行后,输出结果为
printf("%5s", "abcdefg");
A:abcde
B:abcdefg
C:cdefg
D:输出错误信息
答案及解析 B
首先要知道printf可以自动识别字符串类型,所以这跟我们上面定义一个字符串,然后再输出没有区别,%ns,n大于字符串长度,在右边会自动补空格,如果n小于字符串长度的话,输出原来的字符串,一句话总结:大了补空格,小了无影响;
具体博客:C语言printf格式化打印(%d、%md、%f、%c、%s、%o、%x、%p、%e、%E、%n等)-CSDN博客
第三题
3. 下面程序输出的是:
#include <stdio.h> #define f(x) x*x int main () { int a=5,b=2,c; c=f(a)/f(b); printf("%d",c); return 0; }
A:6.25
B:6
C:24
D:25
答案及解析 C
依旧是#define的替换,每次其实看到这个题的时候,都不想写进去,因为我们可以自己手动加括号,但是为了题,所以还是要做;
#define是 替换,不要自己脑海中加括号哦~
第四题
4. 结果为 j 字符的表达式是()
char *p[]={"Shanghai","Beijing","Honkong"};
A:*p[1] +3
B:*(p[1] +3)
C:*(p[3] +1)
D:p[3] [1]
答案及解析 B
这里p是一个指针数组的类型,大家可以试着自己画一画图,就一目了然了。如果有需要解释这个题,评论说一下就好啦
第五题
5. 对于下面代码段,正确的赋值语句( )
char a[5], *p=a;
A:p="abcd";
B:a="abcd";
C:*p="abcd";
D:*a="abcd";
答案及解析 A
CD错:因为字符串默认出现,就是指首元素的地址,所以我们在这里不可以对a和p解引用,这属于类型不匹配;
A:正确,p是一个char类型的指针,开始时指向的是a这个字符数组,之后完全可以改变指向,去指向"abcd"这个常量字符串;
B:错误,因为a是数组的首元素地址,首元素的地址是一个常量,所以不可以被改变,也就是说a的类型是 char * const;指向不可以被改变,但是内容可以被改变;