学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

关于 参数传递 的问题

关于 参数传递 的问题

我以这样的方式定义了一个二维数组
    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语言中不是 定义了二维数组,则数组名就是 **型指针么?
没搞懂,大家指教

TOP

read(int c[][MAX_NUM_OF_NODE])   
or
read (int (*)[MAX_NUM_OF_NODE])
麻雀飞上枝头变凤凰,而菜鸟的我飞上枝头却感冒了,为什么我的脑袋如此的不管用呢。

TOP

指向指针的指针?
<接受者>? or <创造者>?

TOP

多维数组至少指明最低维的长度
“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!

TOP

但是下面的程序编译成功,并且输出也正确啊,我是声明为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;

}

TOP

还有,用这样方法
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));
        }   

定义数组时候  ,怎么初始化数组?

TOP

*(*(c+i)+j) = ?????
其实一个a[i]等于*(a+i); 所以a[i][j]=(*(a+i))[j]=*(*(a+i)+j)了。这个也就是为什么a[i]会和i[a]有相同值的原因。

如果错了请高手们斧正,谢谢!!
前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。

TOP

LS 是对的!
i[a]影响阅读性!
我来自偶然! bitter C

TOP

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[][]
麻雀飞上枝头变凤凰,而菜鸟的我飞上枝头却感冒了,为什么我的脑袋如此的不管用呢。

TOP

发新话题