鱼C论坛

 找回密码
 立即注册
查看: 3579|回复: 9

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

[复制链接]
发表于 2018-3-18 11:51:34 | 显示全部楼层 |阅读模式
5鱼币
遇到一个C语言面试题是视频里原封不动的题目可是还是没做对,我不明白是为什么?昨天又看了视频才明白一点。看视频时总是觉得老师讲的对,但是我写面试题时的思路又和老师讲的不一样,这是为什么啊!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-18 11:56:24 From FishC Mobile | 显示全部楼层
哪个题目?你的代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-18 12:03:44 | 显示全部楼层
BngThea 发表于 2018-3-18 11:56
哪个题目?你的代码?

#include <stdio.h>

int main()
{
        int a[4]={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[1]);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-18 15:31:57 | 显示全部楼层
解题思路、解题方法都不唯一的,最后结果对就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-18 15:46:05 | 显示全部楼层
pony马 发表于 2018-3-18 15:31
解题思路、解题方法都不唯一的,最后结果对就行了

问题是我解题思路不清晰,或者就是错的,楼上的程序prt1[-1] 我的想法是*ptr1=(int*)(&a+1);ptr1指向的是这个数组之后的一块数组那么大的内存,ptr1[-1]不就是数组之后的这块内存的前一块内存,不就是数组a[4]的所有元素1,2,3,4但是运行结果是4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-18 16:56:18 | 显示全部楼层
对a[-1]不理解的话可以看看https://zhidao.baidu.com/question/272197960.html

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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的值就是无法预期的,这个也可以画内存图来判断,我也觉的不好理解?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

虽然两篇博客我都看了但是还是不会。不过还是谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-18 22:24:43 | 显示全部楼层
如果说有一个数组a,a[1]指的是a[0]后面那一块内存单元的话,a[-1]指的就是a[0]前面的那块内存单元
&a+1的意思在那片博文的最后一张图表示的很明白了
这俩知道的话,指针ptr1就应该没什么问题

int *ptr2=(int*)((int)a+1);这句在我的编译器里报错
三个指针,是哪些不太明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-6 09:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表