为什么 volatile 不能修饰数组?

yichuankun 2008-03-07 01:12:48
各位大牛们,请教一下
我知道volatile可以修饰一般变量,如int,__int64,double等,但是volatile不能修饰数组及字符串,为什么啊?
...全文
924 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamliadai 2008-04-02
  • 打赏
  • 举报
回复
iamliadai 2008-04-01
  • 打赏
  • 举报
回复
iamliadai 2008-03-31
  • 打赏
  • 举报
回复
yichuankun 2008-03-10
  • 打赏
  • 举报
回复
谁能从编译器的深度解释一下
iamliadai 2008-03-08
  • 打赏
  • 举报
回复
谁可以从C语言的角度给解释一下呢?这里是C论坛,最好不要牵扯到C++的问题哦
星羽 2008-03-07
  • 打赏
  • 举报
回复

vs2005 的 warnning

: warning C4800: 'volatile char *' : forcing value to bool 'true' or 'false' (performance warning)


IlikeEnglish 2008-03-07
  • 打赏
  • 举报
回复
顶顶,星辰快出来
mLee79 2008-03-07
  • 打赏
  • 举报
回复
因为没有任何形式的重载接受 volatile char* 的参数, 除了 ostream& op<< (ostream& , bool ) ...
代码的意思于是成了 cout << true << endl

IlikeEnglish 2008-03-07
  • 打赏
  • 举报
回复
sheenl ,我觉得你说的不对。
yichuankun 2008-03-07
  • 打赏
  • 举报
回复
谢谢忠告
IlikeEnglish 2008-03-07
  • 打赏
  • 举报
回复
ls你确定?
sheenl 2008-03-07
  • 打赏
  • 举报
回复
因为array实际上是指向该字符数组的首地址, 但是被修饰成volatile了, 所以编译器不再假设他在cout的时候荏苒能够保持为char*类型, 把他当成一个未知地址来处理, 于是就成了1。

在这种时候, cout是很蠢的, 可以用
cout<<(char*)array<<endl;

或者
printf("%s\n", array);

即可。

当然解决这个问题的根本方法是, 不要在数组前面加volatile , 你如果不明白一个东西是做什么用的, 就不要用他。
yichuankun 2008-03-07
  • 打赏
  • 举报
回复
为什么这个输出的是1啊?真不明白!
volatile char array[20] = "Hallo World";
cout << array <<endl;
sheenl 2008-03-07
  • 打赏
  • 举报
回复
可以修饰, 只是意思和它表面上看起来的样子不同吧。

volatile int array[10], 似乎是指array的地址是volatile的, 而不是数组元素的值是volatile的.

而数组的值(或者指针), 不需要加volatile修饰应该也是有volatile属性的吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧