关于 参数传递 的问题
我以这样的方式定义了一个二维数组int **c;
c = (int **)malloc(MAX_NUM_OF_NODE*sizeof(int *));
for(int i=0; i<(MAX_NUM_OF_NODE); i++)
{
c[i]=(int *)malloc(MAX_NUM_OF_NODE*sizeof(int));
}
接下来我有一个函数,函数要用到c[][]来存储数据,那么我声明函数的时候(比如叫read函数)
是
read(int c[][])
还是
read(int **c) 呢?
实验了一下 后者可以,前者不可以,为什么呢?c语言中不是 定义了二维数组,则数组名就是 **型指针么?
没搞懂,大家指教
----------------解决方案--------------------------------------------------------
read(int c[][MAX_NUM_OF_NODE])
or
read (int (*)[MAX_NUM_OF_NODE])
----------------解决方案--------------------------------------------------------
指向指针的指针?
----------------解决方案--------------------------------------------------------
多维数组至少指明最低维的长度
----------------解决方案--------------------------------------------------------
但是下面的程序编译成功,并且输出也正确啊,我是声明为f(int **c)的
为什么呢?
#include <stdio.h>
#include <stdlib.h>
void f(int **c)
{
for(int i=0; i<10; i++)
{
for(int j=0; j<10; j++)
{
c[i][j] = 1;
}
}
}
int main()
{
int **c;
c = (int **)malloc(10*sizeof(int *));
for(int i=0; i<10; i++)
{
c[i]=(int *)malloc(10*sizeof(int));
}
f(c);
for(int k=0; k<10; k++)
{
for(int l=0; l<10; l++)
{
printf("%d",c[k][l]);
}
}
return 0;
}
----------------解决方案--------------------------------------------------------
还有,用这样方法
int **c;
c = (int **)malloc(MAX_NUM_OF_NODE*sizeof(int *));
for(int i=0; i<(MAX_NUM_OF_NODE); i++)
{
c[i]=(int *)malloc(MAX_NUM_OF_NODE*sizeof(int));
}
定义数组时候 ,怎么初始化数组?
----------------解决方案--------------------------------------------------------
*(*(c+i)+j) = ?????
其实一个a[i]等于*(a+i); 所以a[i][j]=(*(a+i))[j]=*(*(a+i)+j)了。这个也就是为什么a[i]会和i[a]有相同值的原因。
如果错了请高手们斧正,谢谢!!
----------------解决方案--------------------------------------------------------
LS 是对的!
i[a]影响阅读性!
----------------解决方案--------------------------------------------------------
int **c;
c = (int **)malloc(MAX_NUM_OF_NODE*sizeof(int *));
for(int i=0; i<(MAX_NUM_OF_NODE); i++)
{
c[i]=(int *)malloc(MAX_NUM_OF_NODE*sizeof(int));
}
如果是这样来造数组的话,那么传入函数的形式应该是read(int **c) ,
而read(int c[][]) 不行是因为c是int**,而read中的是int[][]
----------------解决方案--------------------------------------------------------