桃花飞舞 发表于 2018-3-18 11:51:34

遇到一个问题,帮我分析分析?

遇到一个C语言面试题是视频里原封不动的题目可是还是没做对,我不明白是为什么?昨天又看了视频才明白一点。看视频时总是觉得老师讲的对,但是我写面试题时的思路又和老师讲的不一样,这是为什么啊!

BngThea 发表于 2018-3-18 11:56:24

哪个题目?你的代码?

桃花飞舞 发表于 2018-3-18 12:03:44

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:57

解题思路、解题方法都不唯一的,最后结果对就行了

桃花飞舞 发表于 2018-3-18 15:46:05

pony马 发表于 2018-3-18 15:31
解题思路、解题方法都不唯一的,最后结果对就行了

问题是我解题思路不清晰,或者就是错的,楼上的程序prt1[-1] 我的想法是*ptr1=(int*)(&a+1);ptr1指向的是这个数组之后的一块数组那么大的内存,ptr1[-1]不就是数组之后的这块内存的前一块内存,不就是数组a的所有元素1,2,3,4但是运行结果是4

pony马 发表于 2018-3-18 16:56:18

对a[-1]不理解的话可以看看https://zhidao.baidu.com/question/272197960.html

然后画个内存图,用a、p指一指就好

桃花飞舞 发表于 2018-3-18 21:10:10

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的值就是无法预期的,这个也可以画内存图来判断,我也觉的不好理解?

pony马 发表于 2018-3-18 21:11:03

桃花飞舞 发表于 2018-3-18 15:46
问题是我解题思路不清晰,或者就是错的,楼上的程序prt1[-1] 我的想法是*ptr1=(int*)(&a+1);ptr1指向的是 ...

呃不知道你解决没我又看了一下发现你是对&a+1的理解出了偏差,&a+1是增加整一个数组的地址.
可以参考一下:http://blog.csdn.net/lx627776548/article/details/52514775

桃花飞舞 发表于 2018-3-18 21:51:27

pony马 发表于 2018-3-18 21:11
呃不知道你解决没我又看了一下发现你是对&a+1的理解出了偏差,&a+1是增加整一个数组的地址.
可以 ...

虽然两篇博客我都看了但是还是不会。不过还是谢谢。

pony马 发表于 2018-3-18 22:24:43

如果说有一个数组a,a指的是a后面那一块内存单元的话,a[-1]指的就是a前面的那块内存单元
&a+1的意思在那片博文的最后一张图表示的很明白了
这俩知道的话,指针ptr1就应该没什么问题

int *ptr2=(int*)((int)a+1);这句在我的编译器里报错
三个指针,是哪些不太明白
页: [1]
查看完整版本: 遇到一个问题,帮我分析分析?