初中生
最后登录1970-1-1
在线时间 小时
注册时间2015-3-15
|
发表于 2015-3-15 18:49:02
|
显示全部楼层
选C啊,char *ptr=(int *)(&a+1); 把int* 的类型赋给char * ,这里好像会有问题啊,编译不会警告吗?- #include <stdio.h>
- int main(void){
- char a[4]={1,2,3,4};
- char *ptr=(int*)(&a+1);
- printf("%d\n",*(ptr-1));
- return 0;
- }
- 编译根本通不过:error C2440: 'initializing' : cannot convert from 'int *' to 'char *'
- Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
- 执行 cl.exe 时出错.
- 按出题者的意思应该char *ptr=(char*)(&a+1);
- 这样就是4嘛,原因:a就是数组名,也代表数组的首地址,其类型为char*,而&a是以数组整体为类型,代表其首地址,数值与a一样,我们可以理解为(char[4] )*类型【注:为了方便理解暂且这样说】,&a+1就是a[3]下一个存储区的地址,&a+1本来是(char[4])*类型,把它强制转换成char* 并赋给指针变量ptr,这样ptr-1就回到a[3]存储单元的地址了,因此*(ptr-1)就是a[3],所有是4啊。
复制代码 |
|