各位大神,请问下:我这段代码为什么不能正确输出数组元素?Thanks!
本帖最后由 GSMNC 于 2017-4-9 19:53 编辑#include <stdio.h>
int main()
{
int i, j;
int array = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
int* p;
p = array;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d", (*(p + i) + j));
}
}
return 0;
}
#include <stdio.h>
int main()
{
int i, j;
int array = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
//int* p;
int (*p);
p = array;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
//printf("%d", (*(p + i) + j));
printf("%d", *(*(p + i) + j));
}
}
return 0;
}
人造人 发表于 2017-4-9 19:56
谢谢您!
输出时加*可以理解,但有一点不太理解:为什么指针p要这样设置才起作用?
int (*p); GSMNC 发表于 2017-4-9 20:04
谢谢您!
输出时加*可以理解,但有一点不太理解:为什么指针p要这样设置才起作用?
p 加1时,需要指向下一个 有4个元素的数组
#include <stdio.h>
int main()
{
int i, j;
int array = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
int (*p);
p = array;
for(i = 0; i < 3; i++)
{
printf("%d", **(p + i));
}
return 0;
}
159请按任意键继续. . . 人造人 发表于 2017-4-9 20:14
p 加1时,需要指向下一个 有4个元素的数组
嗯嗯,学到了,感谢!!! #include <stdio.h>
int main()
{
int i, j;
int array = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
int(*p) = {NULL};//这里int *p = array 是错误的
p = array;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d", *(*(p + i) + j));
}
}
return 0;
}
/*p是指向int 变量的指针,array 是二维数组array的数组名,也是此二维数组的首地址,但是这个首地址的数据类型与p指针的数据类型是不同的,array 做为指针类型保存的是array的地址,而array做为指针类型保存的是array变量的地址,所以说指针p 与 array 数据类型是相同的,p = array这个表达式是正确的,array是指向指针的指针的数据类型,在本例中要用行指针与之相对应。就这么多,希望对你有帮助*/ ljd884497 发表于 2017-4-9 21:28
#include
嗯嗯,谢谢您!
另外,可不可以这样理解:
如果array是一维数组名,那么" p = array; " 是正确的吗? 对,array 如果是一维数组名,p = array 就正确了
ljd884497 发表于 2017-4-9 21:41
对,array 如果是一维数组名,p = array 就正确了
{:9_232:}
页:
[1]