| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1715 人关注过本帖
标题:使用const保护二维数组内容,出现警告
只看楼主 加入收藏
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:13 
使用const保护二维数组内容,出现警告
在《C Primer Plus》第十章(数组和指针)中,关于数据保护,提到使用const保护数据。下面是我自己的练习:
程序代码:
#include <stdio.h>

void show(const int array[][10]);    //使用const保护数组内容,出现警告;取消const之后,警告消失
void display(const int *);

int main(void)
{
    int array[10][10], integer[100];
    int i, j, count=0, index;

    for(i=0; i<10; i++)
        for(j=0; j<10; j++, count++){
            array[i][j] = count+1;
            integer[count] = count+1;
        }
    show(array);
    display(integer);

    return 0;
}

void show(const int array[][10])    //使用const保护数组内容,出现警告;取消const之后,警告消失
{
    int i, j;

    for(i=0; i<10; i++){
        for(j=0; j<10; j++)
            printf("%3d  ", array[i][j]);
        putchar('\n');
    }
}

void display(const int integer[])
{
    int index;

    for(index=0; index<100; index++)
        printf("%3d  ", integer[index]);
    putchar('\n');
}

array.c: In function 'main':
array.c:16: warning: passing argument 1 of 'show' from incompatible pointer type
array.c:3: note: expected 'const int (*)[10]' but argument is of type 'int (*)[10]'
保护一维数组内容不会有任何问题,但是保护二维数组内容则出现警告,对二位数组取消内容保护,则警告消失。
两种使用方法的差异在哪里?
为什么?
如何保护二维(多维)数组的内容?
谢谢。
2013-01-05 17:30
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
警告就不鸟他算了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-05 18:29
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:5 
show((const int (*)[10])array);

改成这样不出warning了

听过一个笑话就理解这个warning是啥意思了 吸烟的那个 我们程序员只看error不看warning、、
2013-01-05 18:32
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:10 
可能是gcc的一个问题吧,有两个办法解决:
1、array的定义改为:const int array[10][10];
2、show((const int (*)[10])array);

VC下是不会有警告的。

My life is brilliant
2013-01-05 18:40
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用lz1091914999在2013-1-5 18:40:51的发言:

可能是gcc的一个问题吧,有两个办法解决:
1、array的定义改为:const int array[10][10];
2、show((const int (*)[10])array);
 
VC下是不会有警告的。

不知道大牛怎么理解这个问题的 类型好像就是不一样 所以报好像是正常的。。
2013-01-05 18:42
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 5楼 zklhp
不知道,我以前遇到过,网上也找不到问题所在,可能是个小小的bug吧,VC下是可以的。

My life is brilliant
2013-01-05 18:44
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
收藏
得分:0 
回复 2楼 yuccn
可是我之前见到的对程序员的建议是:
不要忽略任何警告

明察、慎思、笃行
2013-01-06 10:25
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
收藏
得分:0 
回复 3楼 zklhp
因为之前我见到对于学习编程的建议是,对于note、warning之类的任何提示都要注意,尽量消除,所以我才特别注意编译过程中的提示信息。

明察、慎思、笃行
2013-01-06 10:33
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
收藏
得分:0 
回复 4楼 lz1091914999
还是比较倾向于使用第二种方式传递参数。
谢谢。


[ 本帖最后由 gleerat 于 2013-1-6 11:15 编辑 ]

明察、慎思、笃行
2013-01-06 10:42
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:5 
编辑器出警告的意思是变元与实际不符,就好像:
const int array[][10]
int array[][10]
这两个数组相同吗?答案是否定的,所以编辑器会发出警告,不过这不会影响后面的操作,如:
int b = 1;
double a = 1.0 + b;
编辑器同样会出警告,但是它会自己转换类型

I have not failed completely
2013-01-06 11:14
快速回复:使用const保护二维数组内容,出现警告
数据加载中...
 
   



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

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