【C++】字符串指针与字符数组的理解

字符串指针:

1 书写格式

const char* p = "abcdef";//必须使用const

内存四区包含代码区、栈、堆、全局区。全局区内存储常量、全局变量、静态变量,堆中存放使用new后者malloc动态申请存储空间 存储的变量,栈中存放局部变量,可由程序释放。

为什么要加const修饰符?因为 “aaaaa”字符串存储在 常量区,不能被改变。因此采用const char* p的形式。下面的做法是错误的:

p[0] = 'a';

2 访问

1)直接输出p,遇到\0停止输出

const char* p = "abcdef";
cout << p << endl;//直接输出

abcdef
请按任意键继续. . .

2)使用[]访问单个字符

const char* p = "abcdef";
cout << p[3] << endl;//使用[]访问

d
请按任意键继续. . .

p[0] = 'a';//此种写法是错误的

2 可修改指针指向的字符串

const char* p = "abcdef";
cout << p << endl;
cout << p[3] << endl;

p = "hijklmn";//修改指向
cout << p << endl;
system("pause");


abcdef
d
hijklmn
请按任意键继续. . .

3 可以对指针进行修改

const char* p = "abcdef";
cout << p << endl;
cout << p[3] << endl;

p = "hijklmn";
cout << p << endl;

p = p + 1;//指针修改
cout << p << endl;
system("pause");


abcdef
d
hijklmn
ijklmn
请按任意键继续. . .

总结:
字符串指针可以指向不同的字符串,但是不能修改字符串的值,类似于const char* p;
字符串指针可以进行运算,或者通过[]访问;
字符串指针可以直接通过输出指针来输出内容;
字符串指针=赋值时,要检查是否是NULL,并且先释放旧空间,并创建新空间;
字符串在全局区,而指针在栈。

字符数组:

1 书写格式

char str[] = "abc";

字符数组的名str,可以当成常量指针看待,类似于char *const p,也就是数组名不能执像指针似的指向新的字符串,也不可以做运算。可以修改的是分配的内存空间,其分配的内存空间在栈中,长度固定。

上面的形式,虽然是整体“abc”赋值,但是实际上是拆分开后进行的赋值:

char st[] = {
    
     'a','b','c','\0' };

2 访问

cout << st[0] << endl;
cout << st << endl;
cout << st + 1 <<endl;

a
abc
bc

st = st + 1;//错误,st不能改变
st = "asd";//错误,不能像指针变量改变指向,只能通过一个一个元素的改变

总结:
字符串数组与字符串指针相反,可以更改字符串内容,但是不能进行整体赋值,只能一个一个的赋值,类似于char* const p;
字符串数组名称不能进行运算;
字符串数组内存空间在栈中。

参考文章:字符指针与字符串

猜你喜欢

转载自blog.csdn.net/YJYS_ZHX/article/details/114457775
今日推荐