| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1559 人关注过本帖
标题:传递动态二维数组的问题
只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 10楼 吹水佬
   p = (int**)malloc(sizeof(int*)*M);
    for (i=0; i<M; i++)
        p[i] = (int*)malloc(sizeof(int)*N);

我还想知道。这种和你那种申请动态空间有什么区别。这种的话可以直接访问p[i][j],用你的那种方法的是不能像数组这样直接访问。直接*[p+j]这种的话就像访问一个一维数组一样。那你这种方式假如访问[2][3]的地址的值,就要定义一个指针?int *a;p=a+2*n;*(p+j)//*(a+2*n,j);这样才能访问吗?
2017-03-24 17:25
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
回复 11楼 Emotiona
p = (int**)malloc(sizeof(int*)*M);
for (i=0; i<M; i++)
    p[i] = (int*)malloc(sizeof(int)*N);
p这个是指针数组,储存的是一组指针的地址,通常动态分配一组不同大小的存储空间时会这样做。
但M和N是常数,就是说存储空间是固定,一般不用malloc,直接就int a[M][N]声明定义。
至于用指针形式表达还是用数组形式表达,要视实际情况,有时表达形式是可以互相转换。
有时处理一些动态数据时,要求代码模块更通用些,就一定要用指针来表达。
如:当m、n是变数时,处理一个m行n列动态二维数组的函数 fun(p, m, n)。
2017-03-25 05:04
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 12楼 吹水佬
假如我定义一个指针数组**p,大小是由键盘输入行M列N。然后用malloc为开辟M个空间,再为每行开辟N列元素空间。函数 void fun(int **p)来接受指针数组的首地址。
这样再函数里面使用就可以直接用数组的形式表示, 使用很方便。
你说的这种开辟一个M*N的空间,void fun(*p,M,N)是能用指针这种形式运用。使用的话就不能像数组这样用起来方便,但是开辟和释放空间就方便了。
我想问这两种在二维数组下用有没有什么区别?或者还有没有其它优势
2017-03-27 18:02
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
回复 13楼 Emotiona
无需执着用指针或数组的做法,两者实质有好多相似的地方,只是表达形式的不同。
一切从实际出发,自己觉得能做得快又做得好就是了。
2017-03-28 00:18
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 14楼 吹水佬
好的。谢谢你的耐心解答
2017-03-28 10:01
快速回复:传递动态二维数组的问题
数据加载中...
 
   



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

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