【发布时间】:2016-03-20 08:09:34
【问题描述】:
这是教科书中的一个C程序,它向用户询问一个3*5的二维数组并打印第三行。
我对@987654321@ 感到困惑。为什么这里需要[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");
}
【问题讨论】:
-
在 C 中,二维数组只是一个数组的数组。
-
你是对的。这里不需要
p[5]。显然,没有分配给任何p[i]。 -
p = &a[0];不应编译。 -
虽然它可能有效,但它仍然是错误且无用的。为什么不直接索引到二维数组?无论如何,
int *p[5]是错误的类型。只是另一位在数组和指针以及 C 中的语法方面遇到问题的作者。指向内部数组的指针是int (*p)[5]- 注意括号! -
但是当我将其更改为 int*p 时,它报告 (*(p+i))+j) 变为输入 int 而不是 int *。我只想知道这里发生了什么?
标签: c arrays pointers variable-declaration pointer-to-array