免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9851 | 回复: 14
打印 上一主题 下一主题

[C] c如何传递一个数组啊 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-12 15:23 |只看该作者 |倒序浏览
int main()
{
        char achar[10][10];
       //往数组里写数据
        map_a(achar);
}

int map_a(char achar)
{
      printf("%s\n",achar[0][1]);
}

编译出现 error: subscripted value is neither array nor pointer这个错误,可能是我传递方法有问题,请问要如何传递呀?

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
2 [报告]
发表于 2010-01-12 15:26 |只看该作者
int map_a(char (*achar)[10])
{
      printf("%s\n",achar[0][1]);
}

论坛徽章:
0
3 [报告]
发表于 2010-01-12 15:28 |只看该作者
林瑞的面试题吧?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2010-01-12 15:31 |只看该作者
大哥,我不是c程序员啊,我是碰到的一个现实的问题,我一连发了两个帖子,没人帮我改,就我自己改改咯,我把他从c++改成c,在从c的全局改成不全局并加入json在软入到我另外一个程序中去实现地图同屏和自动寻路功能

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2010-01-12 15:36 |只看该作者
int map_a(char (*achar)[10])
{
      printf("%s\n",achar[0][1]);
}

这个char (*achar)[10]的10是未知的,有没有其他办法呢?

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
6 [报告]
发表于 2010-01-12 15:38 |只看该作者
那你要这样
int main()
{
        char achar[10][10];
       //往数组里写数据
        map_a(achar[0], 10);
}

int map_a(char* achar,  int k)
{
      printf("%s\n",achar[0 * k + 1]);
}

论坛徽章:
0
7 [报告]
发表于 2010-01-12 15:43 |只看该作者
楼主没弄明白~C语言中,当函数参数为数组的时候,其实就是一个指针~这就是为什么int main(int argc, char *arv[]) 和 int main(int argc, char **argv)等价了~还有,C语言遵循函数参数是值传递,但从现象上理解数据传递,好像是一个特例。如果一个数组很大,传进函数里,那么开销也很大,所以,数组传参数的时候,是传进去数组首元素的地址。:wink:

论坛徽章:
0
8 [报告]
发表于 2010-01-12 17:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2010-01-12 18:35 |只看该作者
昨天写一个矩阵刚好遇到这问题……我的做法是,用一维数组模拟多维数组,手动计算下标

struct _matrix
{
    int row;
    int column;
    int ref;
    int *data;
};

typedef struct _matrix Matrix;

Matrix *matrix_new (int row, int column, int value)
{
    Matrix *m;
    int i, j;

    assert (column > 0);
    assert (row > 0);

    m = (Matrix *)malloc (sizeof (Matrix));
    if (m == NULL)
    {
        fprintf (stderr, "malloc() error\n");
        return NULL;
    }

    m->data = (int *)malloc (sizeof (int) * row * column);
    if (m->data == NULL)
    {
        fprintf (stderr, "malloc() error\n");
        free (m);
        return NULL;
    }

    for (i = 0; i < row; i++)
    {
        for (j = 0; j < column; j++)
        {
            (m->data)[i * column + j] = value; //就是这一行,手动计算下标,把每个元素初始化为value

        }
    }

    m->row = row;
    m->column = column;
    m->ref = -1;

    return m;
}


data 本来应该是一个二维的数组(data[][]),但是大小无法确定,干脆就用一维的模拟

C FAQ 第6章有提到这个问题。

论坛徽章:
0
10 [报告]
发表于 2010-01-12 19:55 |只看该作者
如果一定要把传整个数组,可以放结构体里。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP