痞子英雄海港城:二级C语言

来源:百度文库 编辑:神马品牌网 时间:2024/05/01 22:25:13
以下程序中若第一个printf语句输出的是194,
则第二个语句printf的输出结果是()
(A)212 (B)204 (C)1a4 (D)1a6
main()
{ int a[]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf("%x\n",p);
printf("%x\n",p+9);
}
请详细说明其理论,为什么是这样的答案!
多谢!

*p指向的是a[0]的地址,p+9就是往后推9个数据,因为数组a是int型的,所以每一个数据占用内存4个单元,16进制的194转换为10进制是404,还有一点要注意,就是说p指向的是a[0]所占的4个单元的第一个单元,当指向a[1]时,还要再往后推3个,又因为指针指向的地址是a[9]占用4个单元中的的第一个单元,具体过程是

数据名 要跳的内存单元数量
a[0] 3
a[1] 4
a[2] 4
a[3] 4
. .
. .
. .
. .
. .
a[9] 1
即404+4*8=436,转换成16进制则为1b4

数组名表示该数组在内存中的起始地址,
p=a即把a的地址赋给p

printf("%x\n",p);将p的值打印出来得到194,化为十进制为404
因为每个int型占4个字节,所以p+9就移动了4*9即36字节,所以现在的位置是404+36=440,转化为十六进制为
1b8,应该是答案没对,我测试过,我的答案是没错的.

forgive me , i haven't install the chinese language package.

under linux sizeof(int)=4 . and 1b4 is the right answer
but under turbo C sizeof(int)=2 .
printf("%x",0x194+18);
output is : 1a6

2楼的,a[0]跳3字节是从a[0]的第一个字节跳到它的最后一个,你这样跳法```汗````最后能跳到a[9]?你``跳大神啊`````晕

1B8

1b8