c语言指针例题
28页1、1、程序运行的结果是什么呢?int main()int a5 = 1, 2, 3, 4, 5 ;int* ptr = (int*)(&a + 1);printf(%d,%d, *(a + 1), *(ptr - 1); return 0;解析:*(a + 1) - 解释:就不再过多解释。*(ptr - 1) - 解释: &a表示取整个数组的地址,对其加一跳过整个数组,指针指向了红色箭头指向的位置,但是这个指针又被强制类型转换成了整形(int*)类型的指针,并存放在ptr这个整形指针变量里面去了。此时的ptr指针就是一个整形指针,对其减一就是向前跳动一个整形的地址指向了蓝色箭头的位置,*(ptr - 1)是以整形指针的视角去读取所指空间的内容,也就是从蓝色箭头的指针处向后访问一个整形(4个字节)的长度,所以读到的就是52、程序运行的结果是什么呢?备注:/p是结构体指针/假设p 的值为0x100000。 如下表表达式的值分别为多少?/已知,结构体Test类型的变量大小是20个字节struct Testint Num;char* pcName;short sDate;char cha2;sh
2、ort sBa4;*p; int main()p = (struct Test*)0x100000;printf(%pn, p + 0x1);printf(%pn, (unsigned long)p + 0x1);printf(%pn, (unsigned int*)p + 0x1); return 0;解析:计算机内存十一字节划分的,一个字节都有一个对应的地址,地址是由16进制来表示的。printf(%pn, p + 0x1); - 解释:p = (struct Test*)0x100000;是将0x100000 强制类型转换成(struct Test*)这个结构体的地址。而我们知道指针的类型决定了指针加减整数的时候跳过的字节数;如:int*类型的指针 + 1 跳过4个字节, char* 类型的指针 + 1跳过1个字节, 所以结构体类型的指针 + 1 就跳过一个结构体。因为这个结构体的大小为20个字节,+1之后指针就向后跳20个字节,20的16进制是14 所以结果就为00100014。printf(%pn, (unsigned long)p + 0x1); - 解释:(unsigne
3、d long)p 是将这个结构体的地址强制类型转换成无符号整形整形数字 + 1就是+1,所以结果是00100001。printf(%pn, (unsigned int*)p + 0x1); - 解释:(unsigned int*)p 是将p强制类型转换成整形指针,整形指针+1就是跳过四个字节,所以结果是00100004。3、程序运行的结果是什么呢?int main()int a4 = 1, 2, 3, 4 ;int* ptr1 = (int*)(&a + 1);int* ptr2 = (int*)(int)a + 1);printf(%x,%x, ptr1-1, *ptr2); return 0;解析:注意:本题的输出方式为十六进制输出。ptr1-1 - 解释:与笔试1类似,不再赘述。*ptr2 - 解释: a是数组首元素的地址,是十六进制的,强制类型转换成整形(int)之后再 + 1 再强转成整形指针,也就是在上几部操作后,a的地址数值加了1,地址加1 就是向后偏移了一个字节。在VS的环境下:存储方式为小端存储ptr从 01 指向了后一个字节 00。(int*)(int)a + 1)
4、 再将其强转成整形指针,再向后访问四个字节并以十六进制的方式输出,所以结果是:2 00 00 00。以什么形式存储,就以什么形式输出,以小端存储方式存入,就以小端的方式输出。4、程序运行的结果是什么呢?int main()int a32 = (0, 1), (2, 3), (4, 5) ;int* p;p = a0;printf(%d, p0); return 0;解析:这道题很简单,逗号表达式是从左到右一次执行,并以最后一个值作为整个表达式的值。所以,数组内部布局为: 1 3 5 0 0 0所以p0就为第一个元素1。5、程序运行的结果是什么呢?int main()int a55;int(*p)4;p = a;printf(%p,%dn, &p42 - &a42, &p42 - &a42); return 0;解析:p是一个数组指针,p能够指向的数组是4个元素a 为二维数组的数组名,二维数组的数组名表示二维数组第一行的地址。同时二维数组可以理解为一位数组组成的数组。p = a;那么p + 1是向后跳了四个整形(int)16个字节。a42的地址比p42的地址高4,所以结果为-4;计算机存
《c语言指针例题》由会员涟熠分享,可在线阅读,更多相关《c语言指针例题》请在金锄头文库上搜索。
2023-08-28 7页
2022-11-11 10页
2022-07-29 74页
2021-12-30 6页
2021-12-30 9页
2021-12-30 6页
2021-12-30 7页
2021-12-30 9页
2021-12-30 7页