遇到一个问题,帮我分析分析?
遇到一个C语言面试题是视频里原封不动的题目可是还是没做对,我不明白是为什么?昨天又看了视频才明白一点。看视频时总是觉得老师讲的对,但是我写面试题时的思路又和老师讲的不一样,这是为什么啊! 哪个题目?你的代码? BngThea 发表于 2018-3-18 11:56哪个题目?你的代码?
#include <stdio.h>
int main()
{
int a={1,2,3,4};
int *ptr1=(int*)(&a+1);
int *ptr2=(int*)((int)a+1);
int *ptr3=(int*)(a+1);
printf("%x, %x, %x", ptr1[-1],*ptr2,ptr3);
return 0;
} 解题思路、解题方法都不唯一的,最后结果对就行了 pony马 发表于 2018-3-18 15:31
解题思路、解题方法都不唯一的,最后结果对就行了
问题是我解题思路不清晰,或者就是错的,楼上的程序prt1[-1] 我的想法是*ptr1=(int*)(&a+1);ptr1指向的是这个数组之后的一块数组那么大的内存,ptr1[-1]不就是数组之后的这块内存的前一块内存,不就是数组a的所有元素1,2,3,4但是运行结果是4 对a[-1]不理解的话可以看看https://zhidao.baidu.com/question/272197960.html
然后画个内存图,用a、p指一指就好
pony马 发表于 2018-3-18 16:56
对a[-1]不理解的话可以看看https://zhidao.baidu.com/question/272197960.html
然后画个内存图,用a、p ...
面试的时候也可以画内存图来分析么?还有就是int *ptr2=(int*)((int)a+1);这一个的*ptr2的值是一个乱码,是由于(int)a已经不是地址而是一个数值,然后*ptr2的值就是无法预期的,这个也可以画内存图来判断,我也觉的不好理解? 桃花飞舞 发表于 2018-3-18 15:46
问题是我解题思路不清晰,或者就是错的,楼上的程序prt1[-1] 我的想法是*ptr1=(int*)(&a+1);ptr1指向的是 ...
呃不知道你解决没我又看了一下发现你是对&a+1的理解出了偏差,&a+1是增加整一个数组的地址.
可以参考一下:http://blog.csdn.net/lx627776548/article/details/52514775 pony马 发表于 2018-3-18 21:11
呃不知道你解决没我又看了一下发现你是对&a+1的理解出了偏差,&a+1是增加整一个数组的地址.
可以 ...
虽然两篇博客我都看了但是还是不会。不过还是谢谢。 如果说有一个数组a,a指的是a后面那一块内存单元的话,a[-1]指的就是a前面的那块内存单元
&a+1的意思在那片博文的最后一张图表示的很明白了
这俩知道的话,指针ptr1就应该没什么问题
int *ptr2=(int*)((int)a+1);这句在我的编译器里报错
三个指针,是哪些不太明白
页:
[1]