| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1715 人关注过本帖
标题:使用const保护二维数组内容,出现警告
只看楼主 加入收藏
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 7楼 gleerat
的确要注意警告,除非你心里已经完全了解这个警告,但这里确实是GCC的一个小问题。

My life is brilliant
2013-01-06 13:55
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 10楼 神龙赖了
int *p;
const int* cp;
cp = p;
虽然p和cp的类型不一样,但是这样是合法的,而且在你只读取一个指针指向的数据时,把一个指针赋值给一个const指针也是最好的,因为可以避免你一时疏忽而修改了指针指向的内容。楼主也是在这里遇到了问题,而这只是编译器的一个小bug

My life is brilliant
2013-01-06 14:03
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
收藏
得分:0 
回复 11楼 lz1091914999
谢谢了。

明察、慎思、笃行
2013-01-07 17:33
kkggkk
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-10-21
收藏
得分:0 
GCC4 的小 bug,GCC5 已解决。

数组做为参数,本质是传递指针,为了直观形象,才特别使用数组形式。
extern void show(const int a[][10]);
其实等效于:
extern void show(const int (*)[10]);

楼主所遇到的问题,可以转化为如下问题:

程序代码:
程序代码:
int main(void)
{
  const int (*a)[2];
  const int b[2][2];
        int c[2][2];

  a = 0, a = a;  // 这行代码只是为了消除提示 a 无用途的警告

  a = b;  // 正确
  a = c;  // GCC4 会警告

  return 0;
}

如上代码呈现了问题所在,它和二维数组作参数无关。
当你用 GCC4 去编译时会警告,但你用 GCC5 去编译时是没有的,使用 VC 去编译也没有。
因为这是 GCC4 的小 Bug,它对于这种复杂的指针类型判断出了点岔子,因此才会提示类型不兼容。
如果你还在用 GCC4,那么除了升级 GCC 外,可以使用强制类型转换以避免这个警告。
a = (const int (*)[10])b;

2016-10-21 14:11
快速回复:使用const保护二维数组内容,出现警告
数据加载中...
 
   



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

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