C++中,char *和char[]定义的变量,不同之处在哪儿里

例如char *p="China和char aq[6]="China"有什么不同那 求指教

9个回答

我的理解,仅供参考
char *p="China"中,p指向“C”,即字符串的首地址

char aq[6]="China"中,aq[6]存放的也是"C"的地址,也是"China"的首地址。aq这个数组是个指针数组,其元素是指针。

char *定义的是指针, char aq[]定义的是数组,指针是一个变量,存的是地址,数组这种变量存的是一串地址连续的数据,而数组名就是数组的首地址,数组首地址是不可改变的常量。

char *p="China
china在常量区

char aq[6]="China"
china在aq中

Hackxiaoyue
卡文特 回复BIG_C_GOD: 数组做函数参数时,会退化为指针,这时是否就相等了
4 年多之前 回复
BIG_C_GOD
BIG_C_GOD 回复卡文特: 是
4 年多之前 回复
Hackxiaoyue
卡文特 回复BIG_C_GOD: char *声明的变量是一个指针char 指向了常量区的地址是嘛
4 年多之前 回复

存储位置不同,一个在常量区,一个在栈上。

首先确定两个变量的数据类型不同,p是指针类型,aq是数组类型;
另外p=“China”中的“China”存储在栈,ap[6]="China"中的“China”存储在常量区,不允许修改,但是当数组用作函数参数时会退化为指针

char *p, p是指针, char *p = "asd"中的字符串存储在常量区; char p[] =“asd”, 定义了一个数组, 其中p是数组名, 而字符串存储在栈区, 当
p作为函数参数会退化为指针。

char *char[]都可以定义一个指向字符串的指针,只不过数组是一个常指针,即char []等价于char const *,也就是数组名是一个常值,不可以给数组名赋值(数组名不可以做左值)。
例如

char *p = "abc";
char a = "abc";

之后,p的值可以修改

p="def"

而:

a = "def"

就是错误的。

一个是指针指向常量区,常量区的值不可改变。
一个是数组。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐