博士
最后登录1970-1-1
在线时间 小时
注册时间2013-3-25
|
本帖最后由 山外メ雲ジ 于 2013-11-20 00:31 编辑
- //运行以下程序,求运算结果
- char a[4]={1,2,3,4};
- char *ptr=(int*)(&a+1);
- printf("%d",*(ptr-1));
- //可供选择的答案:
- //A.1
- //B.2
- //C.4
- //D.随机值
复制代码 国际惯例,答案回复可见。我们出题目的目的,是给大家一个思考的机会,不要题目都不去思考,直接看答案哦,那样学不了东西的。
大家回复的时候,把答案也写上去哦。
这题目的关键地方在于这句话:大家能不能区分下面这语句和上面那语句的区别:两者之前的意思是完全不同的,大家看下面代码注释把- int a[4]={1,2,3,4}; // a:数组首元素的首地址,即 a[0]; &a:数组的首地址
- int *ptr=(int*)(&a+1); // a+1:数组的下一元素的首地址,即 a[1];
- // &a+1:下一数组的首地址,即(int)&a+4*sizeof(int) ,ptr 等效于 &a[4]
- printf("%d",*(ptr-1));//ptr-1 就 等效于 &a[3] ,加上* 取内容,那么结果就是 4
复制代码
|
|