C常见问题之字符串的数组形式与指针形式的区别

来源:互联网 发布:网络传送带使用教程 编辑:程序博客网 时间:2024/05/02 11:00

由双引号括起来的字符串常量属于静态存储类型,它被存储在内存的静态存储区内,所以无论字符串常量出现在程序的什么地方,它在程序的整个运行过程中只存储一份。

如果用字符串常量初始化字符数组,就是从静态存储区把整个字符串复制给数组。例如:

char a[] = "hello";

如果用字符串常量初始化字符指针,就是把字符串在静态存储区的地址复制给指针。例如:

char *p = "world";

这两种形式的一个重要区别是不能通过指针来修改字符串的值,但是字符数组不存在这个问题,如下语句是错误的:

p[0] = 'p';

而如下语句没有问题:

a[0] = 'a';

为了避免通过指针修改字符串的错误,建议将指针指向的对象类型声明为const char,如下所示:

const char *p = "world";
原创粉丝点击