一、最近在练习char数组和char*的操作时,发现了一些区别:char *ch = "abc"和char ch[]="abc",前者改变其内容程序是会崩溃的,而后者完全正确。
#include <iostream>
using namespace std;
main()
{
char *ch1 = "abc";
char ch2[] = "abc";
char *ch3 = ( char* )malloc(3);
c3 = "abc";
printf("%d %d %s\n",&ch1,ch1,ch1);
printf("%d %d %s\n",&ch2,ch2,ch2);
printf("%d %d %s\n",&ch3,ch3,ch3);
}
其运行结果如下:
1441536 20600992 abc
1441524 1441524 abc
1441512 20600992 abc
从上面的结果,可以看出一些区别:
(1)、char *ch1 = "abc";字符指针变量ch1(在栈上分配)指向字符串常量"abc"
首
址,字符串常量存放
数据区
常量段
,其数据不可修改,然后改变常量"abc"自然会崩溃;
(2)、char ch2[] = "abc" 该条语句执行
字符串数组
赋值操作,char ch2[]是一个数组,他的内容存在栈区可以修改;

本文探讨了C++中char数组与字符指针的区别,包括它们在内存分配、修改权限和使用场景等方面的不同。char*指向字符串常量,内容不可修改,而char[]则可以在栈上分配并修改其内容。此外,文章还介绍了程序内存分配的原理,如栈、堆、全局区等,并分析了指针和数组在内存操作中的行为差异。
最低0.47元/天 解锁文章
1804

被折叠的 条评论
为什么被折叠?



