| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2526 人关注过本帖
标题:请教诸神~ const用在二维数组上为什么会出现这种情况?
只看楼主 加入收藏
rupei110
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2010-11-15
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:13 
请教诸神~ const用在二维数组上为什么会出现这种情况?
#include <stdio.h>

void display(const int r[2][2]);

int
main()
{
    int i,j;
    int r[2][2];

    for (i = 0; i < 2; ++i)
        for (j = 0; j < 2; ++j)
            scanf("%d", &r[i][j]);

    display(r);
    printf("\n");
    return(0);
}
void
display(const int r[2][2])
{
    int i,j;
    for(i = 0; i < 2; ++i)
        for (j = 0; j < 2; ++j)
            printf("%d ", r[i][j]);
}
运行~出现:
a.c: In function ‘main’:
a.c:15: warning: passing argument 1 of ‘display’ from incompatible pointer type
a.c:3: note: expected ‘const int (*)[2]’ but argument is of type ‘int (*)[2]’
为什么~这是 什么意思?
搜索更多相关主题的帖子: const 
2010-11-17 03:16
韭菜
Rank: 2
等 级:论坛游民
帖 子:51
专家分:94
注 册:2010-9-26
收藏
得分:3 
楼主  你是什么平台哦   
我的平台是VC6.0  
程序代码:
编译信息如下:
--------------------Configuration: a - Win32 Debug--------------------

a.exe - 0 error(s), 0 warning(s)

测试结果如下:
1
2
3
4
1 2 3 4
Press any key to continue


[ 本帖最后由 韭菜 于 2010-11-17 08:39 编辑 ]
2010-11-17 08:37
starjun14
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:266
专家分:136
注 册:2009-4-26
收藏
得分:3 
学习1~~·~
2010-11-17 09:38
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:3 
你在display函数中声明的形参变量的类型为指向类型为const int的指针,而传递给函数的实参为指向int型的指针,
故编译器在检查类型时发现类型不匹配(多了个限定符const),发出警告。
一般来讲,将一个int型(右值)指针赋值给一个const int型(左值,const 修饰int,而不是指针)时,由于左值具有比右值更多的限定符(在这是const),c语法是允许的,
一些编译器也不会发出警告,不知你的是什么编译器?
2010-11-17 10:05
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1688
专家分:4262
注 册:2007-12-27
收藏
得分:3 
应该这样写,如果您需要的是一个指针常量,而不是指向整型常量的指针。
void display(int (const *r)[2]);

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-11-17 10:34
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:3 
以下是引用forever74在2010-11-17 10:34:11的发言:

应该这样写,如果您需要的是一个指针常量,而不是指向整型常量的指针。
void display(int (const *r)[2]);
   

我就是真命天子,顺我者生,逆我者死!
2010-11-17 10:43
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:3 
以下是引用BlueGuy在2010-11-17 10:43:51的发言:

   
显然这个是高手的写法

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-11-17 10:45
rupei110
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2010-11-15
收藏
得分:0 
回复 2楼 韭菜
ubuntu下的gcc编译器。。。
2010-11-17 12:06
rupei110
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2010-11-15
收藏
得分:0 
回复 4楼 xiaomarn
当为一维数组时就不会报错 gcc编译器~
2010-11-17 12:12
rupei110
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2010-11-15
收藏
得分:0 
回复 5楼 forever74
当我换位如此写法~
a.c:3: error: ‘type name’ declared as function returning an array
a.c: In function ‘main’:
a.c:15: warning: passing argument 1 of ‘display’ from incompatible pointer type
a.c:3: note: expected ‘int (*)(const int *)’ but argument is of type ‘int (*)[2]’
a.c: At top level:
a.c:21: error: ‘type name’ declared as function returning an array
a.c: In function ‘display’:
a.c:21: error: parameter name omitted
a.c:26: error: ‘r’ undeclared (first use in this function)
a.c:26: error: (Each undeclared identifier is reported only once
a.c:26: error: for each function it appears in.)
是编译器的问题吗?2L貌似运行成功
2010-11-17 12:20
快速回复:请教诸神~ const用在二维数组上为什么会出现这种情况?
数据加载中...
 
   



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

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