第一题:
求以下输出结果
int main() {
int a[5] = { 1,2,3,4,5 };
int *ptr = (int *)(&a + 1);
printf("%d,%d", *(a + 1), *(ptr - 1));
return 0;
}
输入结果:
第二题:
struct Test {
int Num;
char* pcName;
short sDate;
char cha[2];
short sBa[4];
}*p;
//假设p的值为Ox100000,如下表表达式的值分别是多少?
//已知,结构体Test类型的变量大小是20个字节
int main() {
p = (struct Test*)0x100000;
printf("%p\n", p + 0x1);
printf("%p\n", (unsigned long)p + 0x1);
printf("%p\n", (unsigned int*)p + 0x1);
return 0;
}
输出结果:
解析:
指针加减整数的运算,取决于指针类型。
第三题:
int main() {
int a[4] = { 1,2,3,4 };
int *ptr1 = (int *)(&a + 1);
int *ptr2 = (int*)((int)a + 1);
printf("%x,%x", ptr1[-1], *ptr2);
return 0;
}
输出结果:
16进制前面的0可以省略!
解析:
第四题:
int main() {
int a[5][5];
int(*p)[4];
p = a;
printf("%p%d\n", &p[4][2] - &a[4][2], &p[4][2].&a[4][2]);
}
输入结果:
解析:
第五题:
int main() {
int a[3][2] = { (0,1),(2,3),(4,5) };
int *p;
p = a[0];
printf("%d", p[0]);
return 0;
}
输出结果:
注意 :二维数组中是逗号表达式,所以a[3][2]={1,3,5}.