第一題
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;指向不可以被改變,但是內容可以被改變;