c语言用数组和指针表示字符串

可以用数组和指针两种方式表示字符串

//数组
char str[] = "my string";

//指针
char *p_str = "my string";

但是它们的内存管理机制不同。

相同点:它们都是使用内存中的字符串"my string"。

不同点:使用数组是先把"my string"的值拷贝一份再赋值到str里。使用指针是使用p_str指向内存中的某个已存在"my string"的地址。

这意味着数组使用str[2] = '_' 这样的语句只会影响str自己,因为它修改的是拷贝了的值,不会影响原有的"my string"

p_str[2] = '_'这样的操作就会影响内存中的"my string",从而影响所有使用这个字符串的代码。比如有另一个指针char *p_str0指向的是和p_str相同的"my string",那么用p_str修改了"my string"的值,就会无意中影响到p_str0以及其他用了这个内存存储的"my string"的变量,这是我们不想发生的。 (现在有些编译器已经禁止指针进行这种修改个别字符的行为,即 p_str[2] = '_' ,但是改变整个指针的赋值是可以的,如 p_str = "another string"

下图展示了两者的主要区别:


图例

1)需要修改字符串,用数组形式。
2)不需要修改字符串,用指针形式,并且加上关键字const,防止自己不小心修改。

const char *p_str = "my string";   
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容