牛骨文教育服务平台(让学习变的简单)
博文笔记

C/C++中关于字符串数组与字符串常量

创建时间:2007-11-01 投稿人: 浏览次数:8657
今天遇到了好多问题,从内存到字符串。。。上网查了些资料,现在就字符串数组和字符串常量来做个总结吧。
其实也就是char  sz[] = "string"; 和char *psz = "string";  这两种字符串的赋值之间的区别。

首先来说说char  sz[] = "string";  这条语句,该语句是按照数组的形式来一个个存放的,编译器将其解释为
char   sz[] = {"s","t","r","i","n","g","/0"}; 如果在函数内部出现的话,这几个字符将存放在堆栈中,所以不是字符串常量。

再来说说char *psz = "string"; 这条语句,该语句定义了一个指向"string"字符串的指针,并没有空间存放"string"字符串,显然把“string”当做字符串常量并存放在常量区是最合适的选择。并且语句 psz[4] = "x"; 在编译时不会报错,执行时会产生异常,原因是“string”存放在只读存储区,不可以修改。这和C++中 const char *psz = "string";一句是一样的,所以最好显示的加上const关键字从而让编译器检测出“修改常量“错误。

以前一直不能理解的一个问题:函数中行参为数组时应怎么看待?
如:void  foo(char sz[100], int ival[10]);
答案是将其理解为指针的形式:
        void  foo(char *sz, int *ival);
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。