第一题
下面代码会输出()
1 2 3 4 5 | int main(){ int a[4]={1,2,3,4}; int *ptr=( int *)(&a+1); printf ( "%d" ,*(ptr-1)); } |
答案是:4
解释:
在这里a和&a的值是一样的,表示的是同一个地址,但是a+1和&a+1就并不一样了,&a+1跳过了整个数组,即指向了末尾的下一个位置。
分析下面的代码:
#include<stdio.h>
int main(){ int a[2][2]={ {1,2},{3,4}}; int * b; b=a[0]; printf("%d\n",*(b+3)); printf("%d\n",a); printf("%d\n",&a); printf("%d\n",a+1); printf("%d\n\n",&a+1); int c[5]={1,2,3,4,5}; printf("%d\n",c); printf("%d\n",c+1); printf("%d\n",&c); printf("%d\n",&c+1); printf("%d\n\n",&c+2); printf("%d\n",*c); printf("%d\n",*(&c));} 执行结果为: