已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},有int (*ptr)[3]=a,*p=a[0].问怎样表示a[1][2].a[1][2]应该是6,我的理解应该是*((ptr+1)[2])应该是可以表达的,但是程序运行后结果是10!然后*(*(a+1)+2),是可以表达的,这
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/21 19:14:08
![已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},有int (*ptr)[3]=a,*p=a[0].问怎样表示a[1][2].a[1][2]应该是6,我的理解应该是*((ptr+1)[2])应该是可以表达的,但是程序运行后结果是10!然后*(*(a+1)+2),是可以表达的,这](/uploads/image/z/574377-33-7.jpg?t=%E5%B7%B2%E7%9F%A5%3Aint+a%5B4%5D%5B3%5D%3D%7B1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%7D%2C%E6%9C%89int+%28%2Aptr%29%5B3%5D%3Da%2C%2Ap%3Da%5B0%5D.%E9%97%AE%E6%80%8E%E6%A0%B7%E8%A1%A8%E7%A4%BAa%5B1%5D%5B2%5D.a%5B1%5D%5B2%5D%E5%BA%94%E8%AF%A5%E6%98%AF6%2C%E6%88%91%E7%9A%84%E7%90%86%E8%A7%A3%E5%BA%94%E8%AF%A5%E6%98%AF%2A%28%28ptr%2B1%29%5B2%5D%29%E5%BA%94%E8%AF%A5%E6%98%AF%E5%8F%AF%E4%BB%A5%E8%A1%A8%E8%BE%BE%E7%9A%84%2C%E4%BD%86%E6%98%AF%E7%A8%8B%E5%BA%8F%E8%BF%90%E8%A1%8C%E5%90%8E%E7%BB%93%E6%9E%9C%E6%98%AF10%21%E7%84%B6%E5%90%8E%2A%28%2A%28a%2B1%29%2B2%29%2C%E6%98%AF%E5%8F%AF%E4%BB%A5%E8%A1%A8%E8%BE%BE%E7%9A%84%2C%E8%BF%99)
已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},有int (*ptr)[3]=a,*p=a[0].问怎样表示a[1][2].a[1][2]应该是6,我的理解应该是*((ptr+1)[2])应该是可以表达的,但是程序运行后结果是10!然后*(*(a+1)+2),是可以表达的,这
已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},
有int (*ptr)[3]=a,*p=a[0].问怎样表示a[1][2].a[1][2]应该是6,我的理解应该是*((ptr+1)[2])应该是可以表达的,但是程序运行后结果是10!然后*(*(a+1)+2),是可以表达的,这是为什么?明明取了地址a+1的值再加2怎么还能再当成指针取其地址的值?
已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},有int (*ptr)[3]=a,*p=a[0].问怎样表示a[1][2].a[1][2]应该是6,我的理解应该是*((ptr+1)[2])应该是可以表达的,但是程序运行后结果是10!然后*(*(a+1)+2),是可以表达的,这
int (*ptr)[3]=a这句,将a的首地址赋值给了ptr,ptr表示的是指向一个含有三个Int的数组的指针,
*((ptr+1)[2])等价于*((ptr+1)+2),等价于*(ptr+3),这表示从数组a的首地址向后移动3个单位,每个单位为一个含有3个Int的数组,所以一共向后移动了9个单位,即得出运行结果10!
要想正确表达a[1][2],应该是(*(ptr+1))[2],数组的运算符[ ]比间值运算符*的优先级高,(*(ptr+1))[2]表示a向后移动一个单位即三个Int,此时ptr指向4,再往后移动2个Int指向6.
其实遇到这类问题画内存结构图比较容易理解了