永发信息网

c语言不会

答案:2  悬赏:0  手机版
解决时间 2021-02-10 16:16
  • 提问者网友:椧運幽默
  • 2021-02-10 09:17
c语言不会
最佳答案
  • 五星知识达人网友:污到你湿
  • 2021-02-10 10:10
由于此时的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时候指针的跨度不同实现的。追问好难....追答
只能帮你到这里·····

追问谢谢啦 我想想..
全部回答
  • 1楼网友:孤独的牧羊人
  • 2021-02-10 11:02
数组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)...大神在吗
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯