指针进阶题目演示
1.求出程序运行结果:
#include<stdio.h>
int main()
{
int[a]={1,2,3,4,5};
int* p=(int*)(&a+1);
printf("%d,%d",*(a+1),*(p-1));
return 0;
}
结果为:
原因:&a+1是给数组地址+1,指针跳过整个数组,跳到5后面的地址,在-1就刚好跳到了5的位置所以解引用为5
a+1是数组名+1,指针指向了2,所以解引用为2
2.补全填空:
#include<stdio.h>
struct Test
{
int Num;
char* pcName;
shortsDate;
char cha[2];
shortsBa[4];
}*p;
//假设p的值为0x100000,则
//p+0x1=0x____?
//(unsigned long)p + 0x1 = 0x____?
//(unsigned int *)p + 0x1 = 0x____?
结果为:
0x100014
0x100004
0x100004
原因:p+1是指p代表的地址加到p的下一个地址,得看p的数据类型,看它需要跳过多少个字节
第一空中p的数据类型是个结构体有20个字节,所以给p加上20个字节后转换为16进制就为0x100014
第二空和第三空中p的数据类型都为4,所以同理可以得出答案
3.求出程序运行结果:
#include<stdio.h>
int main()