C语言中定义字符串数组时,我们经常使用char *s="hello"或者`char
s[]="hello"`两种方式,误以为两种方式等价的,其实不然,差别很大!

1、char *s
char *s="hello":会把hello放入内存的只读部分,声明一个指针s指向它。任何对只读内存的写操作都是非法的,所以类似s[0]='a'的操作是非法的。

2、char s[]
char s[]="hello":首先将字符串放入内存的一个只读区域,然后将字符串复制到一个栈中重新分配内存,因此s[0]='a'是合法的。

引用地址(stackoverflow):
What is the difference between char s[] and char *s in C?

标签: none

评论已关闭