C程序中的数组指针

时间:2016-03-20 08:09:35

标签: c arrays pointers variable-declaration pointer-to-array

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

我对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");
}

1 个答案:

答案 0 :(得分:3)

int *p[5];

是一个包含int的五个指针的数组。

你想要的是一个指向五个int s

数组的指针
int (*p)[5];

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

如果不是错误,编译器应该已经清楚地发出了这个警告。

有关此内容的更多信息:C pointer to array/array of pointers disambiguation