标题:关于 参数传递 的问题
只看楼主
schoolbug
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-5-1
 问题点数:0 回复次数:8 
关于 参数传递 的问题
我以这样的方式定义了一个二维数组
    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语言中不是 定义了二维数组,则数组名就是 **型指针么?
没搞懂,大家指教
搜索更多相关主题的帖子: int 参数 NODE MAX NUM 
2008-05-07 21:53
zhaoyg
Rank: 1
等 级:新手上路
帖 子:328
专家分:0
注 册:2006-8-28
得分:0 
read(int c[][MAX_NUM_OF_NODE])   
or
read (int (*)[MAX_NUM_OF_NODE])

麻雀飞上枝头变凤凰,而菜鸟的我飞上枝头却感冒了,为什么我的脑袋如此的不管用呢。
2008-05-07 23:16
hjh10845
Rank: 1
来 自:火星
等 级:新手上路
帖 子:104
专家分:0
注 册:2008-3-31
得分:0 
指向指针的指针?

<接受者>? or <创造者>?
2008-05-07 23:32
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
得分:0 
多维数组至少指明最低维的长度

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2008-05-07 23:36
schoolbug
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-5-1
得分:0 
但是下面的程序编译成功,并且输出也正确啊,我是声明为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;

}
2008-05-08 02:17
schoolbug
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-5-1
得分: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));
        }   

定义数组时候  ,怎么初始化数组?
2008-05-08 02:22
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
得分:0 
*(*(c+i)+j) = ?????
其实一个a[i]等于*(a+i); 所以a[i][j]=(*(a+i))[j]=*(*(a+i)+j)了。这个也就是为什么a[i]会和i[a]有相同值的原因。

如果错了请高手们斧正,谢谢!!

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-08 09:43
lnhaing
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2008-1-30
得分:0 
LS 是对的!
i[a]影响阅读性!

我来自偶然! bitter C
2008-05-08 09:56
zhaoyg
Rank: 1
等 级:新手上路
帖 子:328
专家分:0
注 册:2006-8-28
得分: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));
        }   
如果是这样来造数组的话,那么传入函数的形式应该是read(int **c) ,
而read(int c[][]) 不行是因为c是int**,而read中的是int[][]

麻雀飞上枝头变凤凰,而菜鸟的我飞上枝头却感冒了,为什么我的脑袋如此的不管用呢。
2008-05-08 12:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-213056-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.302221 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved