| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3801 人关注过本帖
标题:关于利用函数修改二维数组的值
只看楼主 加入收藏
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
结帖率:100%
收藏
 问题点数:0 回复次数:9 
关于利用函数修改二维数组的值
在main函数中定义一个二维数组,例如a[4][4],想要在函数中将其中的值改变,如何实现
int main()
{
    int a[4][4];
    seta(a);
    for(int i = 0; i < 4; i++)
    {
        for(int j = 0; j < 4; j++)
            cout << a[i][j] << endl;
    }
}
void seta(int *a)
{
    for(int i = 0; i < 4; i++)
    {
        for(int j = 0; j < 4; j++)
           a[i][j] = i + j;
}

一维数组好像可以用上面的方法进行传递,但是二维数组不可以,报错
试过 int **a/int *a[4]
都不行
有没有方法在函数中直接对二维数组的具体值进行更改,然后传回到主函数中的二维数组中
搜索更多相关主题的帖子: 如何 
2017-03-15 01:50
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
int a[][4]试试~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-15 02:38
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
int **a

DO IT YOURSELF !
2017-03-15 04:51
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
#include <stdio.h>

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

main()
{
    int a[3][4];
    seta(*a, 3, 4);
    int i, j;
    for (i=0; i<3; i++)
    {
        for (j=0; j<4; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
}
2017-03-15 06:11
绿意盎然
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:47
专家分:60
注 册:2017-1-5
收藏
得分:0 
2017-03-15 08:28
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
回复 5楼 绿意盎然
建议 没事就不要发表情,推荐去随意闲聊

早知做人那么辛苦!  当初不应该下凡
2017-03-15 09:34
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:0 
回复 2楼 九转星河
这个可以了
我声明的时候用a[][4]
写函数的时候用(int (*a)[4])
最后可以输出了
2017-03-15 20:24
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:0 
回复 3楼 wp231957
这个不行,会报错
2017-03-15 20:24
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:0 
回复 4楼 吹水佬
  *(a+i*n+j) = i+j;
这个是不是可以想象数组是一个正方形,然后一个一个往右边数
但是为什么要i*n呢?
2017-03-15 20:27
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用Jonny0201在2017-3-15 20:27:35的发言:

  *(a+i*n+j) = i+j;
这个是不是可以想象数组是一个正方形,然后一个一个往右边数
但是为什么要i*n呢?

好想象力,就象m行*n列个单元,一行接着一行连续存储的单元体。
这样写好理解点:其中的a是整体的首址,p是每行的首址,即i*n是每行首址的偏移量。
#include <stdio.h>

void seta(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 _print(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 a[3][4];
    seta(*a, 3, 4);
    _print(*a, 3, 4);
}
收到的鲜花
  • c小白23332019-10-08 22:12 送鲜花  5朵   附言:谢谢大佬 解释的太好了
2017-03-15 21:05
快速回复:关于利用函数修改二维数组的值
数据加载中...
 
   



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

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