C語言深度解剖最後測試題【答案】
阿新 • • 發佈:2019-02-16
答案
- “>6”
2.strcpy出問題,沒有/0
3.i=10,j=1;
4.除了sizeof(a)是400
5.255
6.
1)*p不能改,p可以改
2)*p不能改,p可以改
3)p不能改,*p可以改
4)*p和p都不能改
7.volatile關鍵字的作用:
防止變數被意外的改變,每次都要從記憶體中讀取。
8.5,2000000
//考慮大小端的問題,指標偏移一個位元組
int ptr2 = (int )((int)a+1);
這時a被強制轉換為整形(為不是int*型),所以地址值+1而不是+4
同時因為計算機是小端序,所以造成這樣
記憶體:
高地址
|---01---|<--a(陣列a首地址)
|---00---|<--(*ptr2=0x02000000)
|---00---|
|---00---|
|---02---|
|---00---|
|---00---|
|---00---|
|---03---|
|---00---|
低地址
9.0x10
10.考察巨集替換
#define SQR(x) ((x)*(x))
//因為巨集的本質是字串的替換,所以
//一定不能省了括號中的括號,避免出現優先順序問題
//比如SQR(1+2)時,得到的結果可能有問題
11.(1)佔12byte(2)佔8byte
12.
int *p = (int *)0x12ff7c;
*p = 0x100;
或者*(int*)0x12ff7c = 0x100;
13.2,5
14.
0x100014,
0x100001,//因為這裡轉換成unsigned long而不是指標
0x100004,
15.1 注意逗號運算子
16.不應該傳進去b[10],應該傳進去b
- char *name沒有分配空間
18.
0
1
2
5
10
19.getchar的返回值是int這可能造成問題
20.
//我自己寫的
int is_big_or_little()
{
int i = 0x11223344 ;
char *p = (char *)&i;
if(*p == 0x11)
return 0;//大端序
else if(*p == 0x44)
return 1;//小端序
else
return -1;//錯誤
}
//書上的答案
int checkSystem()
{
union check{
int i;
char ch;
}c;
c.i = 1;
return (c.ch == 1);
}