LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
123
返回列表 发新帖
楼主: aishen944

const 限定符 很奇怪的问题(c语言新手),请看例子

[复制链接]
发表于 2006-1-13 13:16:03 | 显示全部楼层
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf
Section 6.7.3 里面有这么一段话:
  1. If an attempt is made to modify an object defined with a const-qualified type through use
  2. of an lvalue with non-const-qualified type, the behavior is undefined.
复制代码


所以像
  1. const int i = 10;
  2. int *j = &i;
  3. *j = 100;
复制代码

这种代码是允许的, 但其行为应该是未定义的. :-)
回复 支持 反对

使用道具 举报

发表于 2006-1-14 20:44:56 | 显示全部楼层
1)在你的第一段程序里,
s2 = "It's modified!";
并不是改变s2所指向的内存的内容,而是改变了s2,使s2指向了新的地址,就是"It's modified!"




Post by aishen944
在c语言里
int main() {
   const char* s1 = "test";
   char *s2 = s1;
   s2 = "It's modified!";
   printf("%s\n",s1);
}
out: It's modified!;

这样也可以吗? 照我的理解岂不是const限定符在c语言里只是摆设一个

在c++里
int main() {
   const char* s1 = "test";
   char* s2 = s1;
   ...
}
这样编译通不过,说不能从const char* 转换到char*
再者
int main() {
   const char* s1 = "test";
   char* s2 = (char*) s1;
   s2 = "It's modified!";
   
   cout << s1 << endl;
   cout << s2 << endl;
}
out:test
      It's modified!
这次强制转换并编译通过,可是s1的值并没有改变!!


小弟还是新手!! 请大家赐教!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表