求助大神,二维数组
# include <stdio.h>
void output(int (*p));//函数作用:输出数组
int main(void)
{
int a = {
{0, 1, 0, 1, 0},
{1, 1, 1, 1, 1},
{0, 1, 0, 1, 0},
{1, 1, 1, 1, 1},
{0, 1, 0, 1, 0}
};//定义一个二维数组
output (a);
return 0;
}
void output (int *p)
{
int i, j;
for (i = 0; i < 5; i ++)
{
for (j = 0; j < 5; j ++)
printf("%3d", (p+i));
printf("\n");
}
}
这个二维数组的输出结果为什么是:
01010
10101
01011
10111
01111 # include <stdio.h>
void output(int (*p));//函数作用:输出数组
int main(void)
{
int a = {
{0, 1, 0, 1, 0},
{1, 1, 1, 1, 1},
{0, 1, 0, 1, 0},
{1, 1, 1, 1, 1},
{0, 1, 0, 1, 0}
};//定义一个二维数组
output (a); // 数组名就可以代表指针,与参数类型要相符
return 0;
}
void output (int (*p))
{
int i, j;
for (i = 0; i < 5; i ++)
{
for (j = 0; j < 5; j ++)
printf("%3d", (*(p+i))); // 先对p+i解引用表示行的起始地址,然后再往后j个列
printf("\n");
}
} 本帖最后由 BngThea 于 2017-10-29 21:34 编辑
首先,函数声明和函数定义不一致
形参上一个是数组指针,一个是指针数组
正确的应该是数组指针,也就是声明的形式
其次,打印的时候的取值方式有问题
printf("%3d", (p+i));
这里应该为 (*(p+i)) 或者干脆全用指针或下标索引 *((*(p+i)) +j)或 p
最后,在output函数中,更好的方法是将目标数组的行数作为参数传递进去
下面是我简单的修改,第三点没改
# include <stdio.h>
void output(int (*p));//函数作用:输出数组
int main(void)
{
int a = {
{0, 1, 0, 1, 0},
{1, 1, 1, 1, 1},
{0, 1, 0, 1, 0},
{1, 1, 1, 1, 1},
{0, 1, 0, 1, 0}
};//定义一个二维数组
output (a);
getchar();
return 0;
}
void output (int (*p))
{
int i, j;
for (i = 0; i < 5; i ++)
{
for (j = 0; j < 5; j ++)
printf("%3d ", p);
printf("\n");
}
} BngThea 发表于 2017-10-29 21:30
首先,函数声明和函数定义不一致
形参上一个是数组指针,一个是指针数组
正确的应该是数组指针,也就是声 ...
多谢,受教了 丶忘却的年少o 发表于 2017-10-29 21:27
谢谢 BngThea 发表于 2017-10-29 21:30
首先,函数声明和函数定义不一致
形参上一个是数组指针,一个是指针数组
正确的应该是数组指针,也就是声 ...
那麻烦可以帮我分析分析刚我那么写输出结果为什么会成为那样 冰林炎 发表于 2017-10-29 21:57
那麻烦可以帮我分析分析刚我那么写输出结果为什么会成为那样
我的编译器拿你的代码都通不过编译
我估计是指针的错误使用导致的 BngThea 发表于 2017-10-29 22:04
我的编译器拿你的代码都通不过编译
我估计是指针的错误使用导致的
哦,好吧,谢谢了
页:
[1]