推荐回答里面是有问题的,对于指向字符的指针来讲,其指向内容是否可变,要看他指向的内容,指向字符的指针可以指向两种字符串:1.字符串常量,如char
*q="abcd",这里q指向的内容是不可变的,即q[1]='a'是不合法的;2.字符串变量,如char
p[10],然后给p赋值,然后char
*q=p,这里的q指向的内容是可以变的
需要注意的是,这里是q指向的内容是否可变,而不是q指向的内存是否可变也就是说1中的q可以有q=p(p也是一个字符指针)这样的操作
两个用法差不多,唯一的区别在于字符数组的值在程序运行过程中是可以修改的,但是字符指针的值在运行过程中是不能修改的。
#include
using namespace std;
int main()
{
char *a = "abcd";
char b[10] = "abcd";
//a[2] = 't'; //运行会报错
b[2] = 't'; //正常
//cout << b << endl;
return 0;
}
字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在
以该首地址为首的一块连续的内存空间中并以‘\0’
作为串的结束。字符数组是由于若干个数
组元素组成的,它可用来存放整个字符串
char
*p
=“C
language”;
char
p[]={"C
language"};
可以理解为:字符指针是字符数组的退化
但是实际使用中,字符串指针却比字符数组更好用
字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。
对指向字符变量的指针变量应赋予该字符变量的地址。如:
char
c,*p=&c;表示p是一个指向字符变量c的指针变量。而:
char
*s="C
Language";则表示s是一个指向字符串的指针变量。把字符串的首地址赋予s。