| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1649 人关注过本帖
标题:传递动态二维数组的问题
只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
收藏
已结贴  问题点数:14 回复次数:14 
传递动态二维数组的问题
代码可以运行,被警告了,怎么修改
图片附件: 游客没有浏览图片的权限,请 登录注册

#include<stdio.h>
#include<stdlib.h>
int n;
void Tri(int (*p)[30])
{
    int i,j;
    for(i=0;i<n;i++)
    {
        p[i][i]=1;
        p[i][0]=1;
    }
    for(i=2;i<n;i++)
    for(j=1;j<=i-1;j++)

    {
        p[i][j]=p[i-1][j-1]+p[i-1][j];
    }
    for(i=0;i<n;i++)
    {
    for(j=0;j<=i;j++)
    printf("%-4d ",p[i][j]);
    printf("\n");
    }

}
int main()
{
    int **p, i;
    while(1)
    {
        printf("输入杨辉三角的N行,打印出杨辉三角\n");
        scanf("%d",&n);
        p=(int **)malloc(n *sizeof(int *));
        for(i=0;i<n;i++)
        *(p+i)=(int *)malloc(n *sizeof(int));
        Tri(p);
    }
}
搜索更多相关主题的帖子: include 动态 
2017-03-23 17:10
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:7 
直接分配一个m*n个元素空间
2017-03-23 17:28
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:7 
问题很简单,把void Tri(int (*p)[30]){},改为void Tri(int **p){},就好了

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-03-23 17:40
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 2楼 吹水佬
不懂、
2017-03-23 18:18
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 4楼 Emotiona
简单示例:
#include <stdio.h>
#include <stdlib.h>

void _input(int *a, int m, int n)
{
    int i, j, *p;
    for (i=0; i<m; i++)
    {
        p = a+i*n;
        for (j=0; j<n; j++)
            *(p+j) = i+j;
    }
}

void _output(int *a, int m, int n)
{
    int i, j, *p;
    for (i=0; i<m; i++)
    {
        p = a+i*n;
        for (j=0; j<n; j++)
            printf("%d ", *(p+j));
        printf("\n");
    }
}

main()
{
    int m=5, n=6;
    int *a = (int*)malloc(m*n*sizeof(int));
    _input(a, m, n);
    _output(a, m, n);
    free(a);
}
2017-03-23 19:40
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 5楼 吹水佬
你这个分配的是一维指针吧。
void _input(int *a, int m, int n)
{
    int i, j, *p;
    for (i=0; i<m; i++)
    {
        p = a+i*n;                你这里是什么意思呢。和p=a;有什么区别值都一样
        for (j=0; j<n; j++)
           {

           *(p+j) = i+j;
            printf("%d ",*(p+j));
           }
    }
}
2017-03-24 13:24
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 6楼 Emotiona
指针表达的只是一个地址,没什么一维二维。
p = a+i*n; 这时的p指针是相对二维数组来说的,表达的是第i行的首地址。
*(p+j)就好理解,就是第i行j列元素值,也可以写成p[j]好理解点,甚至还可以写成是j[p],是不是有点神,C的数组就是这怪样,hehe...

[此贴子已经被作者于2017-3-24 14:09编辑过]

2017-03-24 13:56
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
以下是引用吹水佬在2017-3-24 13:56:54的发言:

指针表达的只是一个地址,没什么一维二维。
p = a+i*n; 这时的p指针是相对二维数组来说的,表达的是第i行的首地址。
*(p+j)就好理解,就是第i行j列元素值,也可以写成p[j]好理解点,甚至还可以写成是j[p],是不是有点神,C的数组就是这怪样,hehe...


p=a+i 才是i行首地址啊。
p=a+i*n   p=a+0*6等价于p=a; p=a+1*6不等价于p=a+1...不明在这里。有点蒙蔽
2017-03-24 15:20
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 7楼 吹水佬
以下是引用吹水佬在2017-3-24 13:56:54的发言:

指针表达的只是一个地址,没什么一维二维。
p = a+i*n; 这时的p指针是相对二维数组来说的,表达的是第i行的首地址。
*(p+j)就好理解,就是第i行j列元素值,也可以写成p[j]好理解点,甚至还可以写成是j[p],是不是有点神,C的数组就是这怪样,hehe...


p=a+i 才是i行首地址啊。
p=a+i*n   p=a+0*6等价于p=a; p=a+1*6不等价于p=a+1...不明在这里。有点蒙蔽
2017-03-24 15:26
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 9楼 Emotiona
i是行计数,一行有n列。
p=a+i*n
如: m=3,n=3, a[]={1,2,3,4,5,6,7,8,9}
i/j...........0 1 2 ...a[]={1,2,3,4,5,6,7,8,9}
------------- -------- -----------------------
0行 p=a ..... 1 2 3 ....... p ...............
1行 p=a+n ... 4 5 6 ............. p .........
2行 p=a+2n .. 7 8 9 ................... p ...
2017-03-24 16:07
快速回复:传递动态二维数组的问题
数据加载中...
 
   



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

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