c语言不会

 我来答
_277282419
2016-11-08 · TA获得超过631个赞
知道小有建树答主
回答量:227
采纳率:100%
帮助的人:119万
展开全部
由于此时的ptr属于int类型的指针变量意味着+1+2········其实偏移的是int类型的字节数
不要以为 +2就是第3行 +4就是第5行
prt = a[0][0];
这里的a[0][0]就是元素1对吧 你应该知道吧 问题就在于此时把这个a[0][0]前面加个”&“
这个叫取地址运算符 这也意味着元素1所在的内存地址赋给了prt
又由于prt本身就是int*类型所以只能接受int类型变量的地址 此时a[0][0]前面加了个“&” 变成&a[0][0]可不就是int类型的地址么。这句理解了吧。
接下来m = (*ptr)*(*(ptr+2))* (*(ptr+4));
其中ptr+2,ptr+4 意味着ptr这个指针要发生偏移
ptr+2就意味着ptr变量的值发生变化,而这个变化就导致ptr的值改变,ptr的值改变就意味着指向了改变后的内存单元(某个int类型的值)
m = (*ptr)*(*(ptr+2))* (*(ptr+4));
m = 1*3*5;
m = 15;

固然 m= 15
更多追问追答
追问
...为什么PTR+2等于3啊
追答
这个跟你一句两句说不清楚哦   虽然老师在说二维数组的时候说什么几行几列
其实在内存中物理结构还是线性结构(理解这个重要 你自己慢慢体会慢慢想会想明白)。只是+1时候指针的跨度不同实现的。
mlper_
2016-11-08 · TA获得超过8013个赞
知道大有可为答主
回答量:4863
采纳率:78%
帮助的人:1061万
展开全部
数组a[2][3]在内存单元中的存储顺序为a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2],所以ptr指向的单元是a[0][0],ptr+2指向的单元是a[0][2],ptr+4指向的单元是a[1][1],因此m=a[0][0]*a[0][2]*a[1][1]=1*3*5=15
更多追问追答
追问
大神为什么 ptr+2不是a(2)(0)
...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式