C语言二维数组名的问题已定义int w[3][5],那*(*(w+1))为什么不是w[1][0]而是w[0][1]呢,w不是指向w[0]吗,那w+1不指向w[1]了吗还有*(w+1)[4]这个哪里不合法了,在*和[]同时用来表示一个元素时应该怎么用法

来源:学生作业帮助网 编辑:作业帮 时间:2024/10/02 19:12:10
C语言二维数组名的问题已定义int w[3][5],那*(*(w+1))为什么不是w[1][0]而是w[0][1]呢,w不是指向w[0]吗,那w+1不指向w[1]了吗还有*(w+1)[4]这个哪里不合法了,在*和[]同时用来表示一个元素时应该怎么用法
xTMSP+Yu0fTc?ɢu8mgF?A:bJL`3ᄐ =/]v {y{ˬΝ̳kߢnP Oɮ򧵯J.VϮZTSj*7c|=N.ֳK0hcMZ.sD}O luS('du1>c ބ% T5C 5:*XYY18+<[w$+n쁩L{e>~^(X7|x9|JF28p0yX^,fE]kc`, L8M*eYT p'il0 IR6M 56*R&a}jVHsFLܕ?`ޤm!6j lpEQ\&=ݓmW y7!LdJUCoU^Q3>a/5ztnDvJHٗQ˸: >̨3 %G47'm}c~Kȳ ǧ1 aۧAc2h۠M3)U x

C语言二维数组名的问题已定义int w[3][5],那*(*(w+1))为什么不是w[1][0]而是w[0][1]呢,w不是指向w[0]吗,那w+1不指向w[1]了吗还有*(w+1)[4]这个哪里不合法了,在*和[]同时用来表示一个元素时应该怎么用法
C语言二维数组名的问题
已定义int w[3][5],那*(*(w+1))为什么不是w[1][0]而是w[0][1]呢,w不是指向w[0]吗,那w+1不指向w[1]了吗
还有*(w+1)[4]这个哪里不合法了,在*和[]同时用来表示一个元素时应该怎么用法(比如(*w+1)[4]表示w[1][4]怎么来的).

C语言二维数组名的问题已定义int w[3][5],那*(*(w+1))为什么不是w[1][0]而是w[0][1]呢,w不是指向w[0]吗,那w+1不指向w[1]了吗还有*(w+1)[4]这个哪里不合法了,在*和[]同时用来表示一个元素时应该怎么用法
二维数组名是指定长度的一维数组的指针(常量指针),而一维数组本身是个指针,所以一般叫指针的指针,但其实有差异的.

w的类型是 int (*)[5]
*(*(w+1))等价于w[1][0],谁和你说不是?你如果怀疑自己做个测试不就完了.

w+1等价于&w[1]或w[1],类型 int (*)[5] 和w一样
*(w+1)等价于&w[1][0] ,类型 int * ,注意 w+1和 *(w+1)地址是一样的但是类型不同
*(*(w+1))等价于w[1][0]

*(w+1)就是在第二行地址,类型是int *,它是个整体,使用它当做一维数组读取必须加括号
正确的写法是:(*(w+1))[4]
如果不加括号意义就不同了,*(w+1)[4] 那就成了第二行第5个元素作为指针,但是实际上该元素是个整数,会造成非法地址访问.