3

这是教科书中的一个 C 程序,它向用户询问一个 3*5 二维数组并打印第三行。

我很困惑int* p[5]。为什么这里需要有[5],我觉得int* p还可以。它可以重复添加并指向int数组中的下一个内存空间。谁能解释一下指针在这个程序中是如何工作的?

#include <stdio.h>

int main(void){
        int a[3][5];
        int i,j;
        int *p[5];

        p = &a[0];
        printf("Please input:\n");
        for(i = 0; i < 3; i++){
                for(j = 0; j<5;j++){
                        scanf("%d\n",(*(p+i))+j);
                }
        }
        p = &a[2];
        printf("the third line is:\n");
        for(j = 0; j<5; j++){
                printf("%5d", *((*p)+j));
        }
        printf("\n");
}
4

1 回答 1

3
int *p[5];

是一个由五个指向 的指针组成的数组int

你想要的是一个指向五个ints的数组的指针

int (*p)[5];

因为&a[0]是第一个元素的地址,a它是一个int[5].

编译器应该至少对此发出警告,如果不是错误的话,这是可以预料的。

更多信息在这里:C 指向数组/指针数组的指针消歧

于 2016-03-20T08:17:44.677 回答