深挖小白必会指针笔试题<一>

目录

引言 

关键解决办法:

学会画图确定指向关系

例题一:

画图分析:

例题二:

画图分析: 

例题三: 

注:%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;
}
//程序的结果是什么?
画图分析:

深挖小白必会指针笔试题<一>_第1张图片

例题二:

//这里结构体的大小是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;
}
画图分析: 

深挖小白必会指针笔试题<一>_第2张图片

例题三: 

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是按十六进制打印
画图分析:

深挖小白必会指针笔试题<一>_第3张图片

例题四: 

#include 
int main()
{
 int a[3][2] = { (0, 1), (2, 3), (4, 5) };
 int *p;
 p = a[0];
 printf( "%d", p[0]);
 return 0;
}
画图分析: 

深挖小白必会指针笔试题<一>_第4张图片

谢谢观看,学完你我皆是大佬 

你可能感兴趣的:(C,算法)