目录
引言
关键解决办法:
学会画图确定指向关系
例题一:
画图分析:
例题二:
画图分析:
例题三:
注:%x是按十六进制打印
画图分析:
例题四:
画图分析:
谢谢观看,学完你我皆是大佬
听说看到日落金山的人,接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧
引言
关于指针的问题常常是每个c初学者最痛疼的问题,常常搞不清指向关系而出错,接下来将通过一些经典的笔试题来详细讲解关于指针的问题,难度逐渐增加,请耐心看到最后,将会收获满满
关键解决办法:
学会画图确定指向关系
例题一:
int main()
{int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1);printf( "%d,%d", *(a + 1), *(ptr - 1));return 0;
}
//程序的结果是什么?
画图分析:
例题二:
//这里结构体的大小是20个字节
struct Test
{int Num;char *pcName;short sDate;char cha[2];short sBa[4];
}*p;
//假设p 的值为0x100000。 如下表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
int main()
{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;
}
注:%x是按十六进制打印
画图分析:
例题四:
#include <stdio.h>
int main()
{int a[3][2] = { (0, 1), (2, 3), (4, 5) };int *p;p = a[0];printf( "%d", p[0]);return 0;
}