注册 登录
编程论坛 C语言论坛

一个很简单的指针题,求解答q[2][3]是?

编程小猪 发布于 2022-10-30 15:52, 1044 次点击
int main(){
    int *q[3],a[]={2,4,6,8,10,12,14,16,18,20,22,24};
    for(int i=0;i<3;i++){
        q[i]=&a[4*i];   
        //这是把a数组的a[0]、a[4]、a[8]的地址给了指针数组q的q[0]、q[1]、q[2]
    }
    printf("%d\n",q[2][3]);   //输出24
}
//q[2][3]是哪几个数的和?代表了什么?
4 回复
#2
rjsp2022-10-30 20:49
既然 q[2] = &a[8];
那么 q[2][3] = (&a[8])[3] = a[11]
#3
编程小猪2022-11-01 19:01
回复 2楼 rjsp
🐂🍺,谢谢大佬!
如果是求q[1][3]的话,就是q[1][3] = (&a[1*4])[3] = a[7]对吧!

[此贴子已经被作者于2022-11-1 19:03编辑过]

#4
renkejun19422022-11-01 22:02
C语言没有真正的多维数组,多维数组的本质是数组的数组。
#5
rjsp2022-11-02 09:25
从语义上分析的话,形如 a[b] 就是“以a所指地址为起始,其后第b个元素(假如a是指针b是索引的话)”或“以b所指地址为起始,其后第a个元素(假如b是指针a是索引的话)”
q[1] = &a[4],也就是 q[1] 指向 a 中第4个元素,那么 q[1][3] 就是 “a中第4个元素位置后面的第3个元素”,这当然就是 a[7] 了

从语法上分析的话,C语言规定 a[b] 等同于 *(a+b),又规定左值的 *& 互消
q[1] = &a[4],也就是 q[1] = &(*(a+4)) = a+4,那么 q[1][3] = *( q[1] + 3 ) = *( a+4 + 3 ) = *(a+7) = a[7]
1