由字符指针定义的字符串不可修改问题
2012-03-26 10:49
225 查看
老生常谈的问题,就当复习了....
问题引入:
在C++中,如果用指针来援引字符串,比如: char *p="abcd"; 此时该字符串为常量,不可以用指针p进行修改,比如:p[0]='e'; 因为不可以修改常量值;如此定义字符数组道理是一样的,无非是多了几个常量指针,如:p[0]、p[1]、p[2]等,这些指针指向的字符串都是常量,不可以随意更改。如果你想可以修改的话,就需要定义成数组形式如: char p[]="abcd"; 此时的 p[0]='e'; 则是正确的。
至于*pt="abcde"; 是可以的,这里你首先要明白这几点:这里的*pt是一个指针,它里面存放地址,等价于pt[0]或者*(pt+0) ;另外,每一个字符串都是一个地址,这句话只是让*pt指针改变了指向,现在它指向了新的字符串"abcde";
问题引入:
#include <iostream> using namespace std; int main() { char *str1 = "abcd"; cout << str1 << endl; str1[0] = 'e'; cout << str1 << endl; return 0; }注:编译没有问题,运行时出现问题。
在C++中,如果用指针来援引字符串,比如: char *p="abcd"; 此时该字符串为常量,不可以用指针p进行修改,比如:p[0]='e'; 因为不可以修改常量值;如此定义字符数组道理是一样的,无非是多了几个常量指针,如:p[0]、p[1]、p[2]等,这些指针指向的字符串都是常量,不可以随意更改。如果你想可以修改的话,就需要定义成数组形式如: char p[]="abcd"; 此时的 p[0]='e'; 则是正确的。
至于*pt="abcde"; 是可以的,这里你首先要明白这几点:这里的*pt是一个指针,它里面存放地址,等价于pt[0]或者*(pt+0) ;另外,每一个字符串都是一个地址,这句话只是让*pt指针改变了指向,现在它指向了新的字符串"abcde";
相关文章推荐
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 指针与字符串:(const)char *p2 = "lmj";定义的是一个字符串常量!符串常量,正因为是常量,所以它内部的字符是不允许修改的。
- c语言字符指针数组经典,此后不必再担心字符串问题.
- 指针定义两个字符串,用strcpy交换问题?
- C常见问题之字符串数组和字符指针数组问题
- C/C++字符串,字符数组,字符指针及其相互静态拷贝与追加的安全问题解决方案(1)
- 关于字符串 字符数组 字符型指针的问题
- c语言字符指针数组经典,此后不必再担心字符串问题.
- c++字符指针与字符串的问题
- 关于字符串指针指向内容不能修改的问题
- 定义字符指针数组分别指向5个字符串常量,从小到大输出字符串内容
- C语言中字符数组和字符串定义和初始化的问题
- 指针字符串修改问题、static
- 函数里定义的字符串常量与字符指针