读书人

一个简单有关问题 关于指针

发布时间: 2012-02-26 20:19:43 作者: rapoo

一个简单问题 关于指针
如果我这样

char *a="abcd";
printf("%c",a[0]);
a[0]='A';

第二行可以正确显示出a
为什么第三行就会报错..
本人初学C 希望不会招骂 ^^

[解决办法]
这是很多初学者都容易遇到的问题,原因很简单

char *a="abcd";
相当于
const char *a="abcd";

也就是说,a指向的内容是只读的常量,不能修改的,如果去修改,自然要出错。
[解决办法]
char *a="abcd";
printf("%c",a[0]);
a[0]='A';

a是一个指向常量字符串的指针, 所以a指向的地址段中的内容是不可以修改的, 一修改程序就出强制退出.
"abcd"是一个常量字符串, 存放在常量字符串池中.
[解决办法]

C/C++ code
const char *a;//指向的内存空间的值是常量,不可变.char const *a;//该指针本身是一个常量,不可变.也就是说指针所代表的地址是固定的.
[解决办法]
LZ啊,你看看C风格字符串把,那里会详细的告诉你的

你用字符串字面值"abcd" 去初始化字符数组a,你必须知道
字符串字面值的类型便是字符常量数组,也就是说,你要认识到,字符串字面值
的类型就是const char类型的数组,所以你要修改一个const性质的元素,当然不可以了


探讨
C/C++ codeconst char *a;//指向的内存空间的值是常量,不可变.
char const *a;//该指针本身是一个常量,不可变.也就是说指针所代表的地址是固定的.

读书人网 >C语言

热点推荐