【急问C语言】字符串与字符数组的区别?请用具体实例(最好把各种比表示方法都列出来)说明。

二者在大小,存储空间, 长度上的区别?

通常字符数组中的所存储的内容也可以称为字符串, 但我想你想表达的意思可能是对于:

char *p1 = "A String.";



char p2[] = "Another String.";

这两种写法的不同吧.

p1指向的这个字符串是个常量, 不可改变, 程序在编译期间就为"A String."这个字符串分配了固定的空间, 它被存储在全局静态区中.

而p2是个变量, 其内容可以被更新和改变, p2可以理解为一个不可改变其指向位置的指针, 即char * const p2, 它所占用的内存在程序运行时被自动分配和释放, 而p1占用的内存要等到整个程序结束时才被释放.

再看:

#include <stdio.h>

int g; // 存储在全局静态区

int main()
{
char* p1 = "haha"; // 和g一样
char p2[] = "haha"; // 堆栈中

printf("%x %x %x", &g, p1, p2);
}

你可以看出p1和g的位置距离很近, 而和p2相隔很远, 可以看出他们的确是被存储在不同的内存空间中的, 而且p1所指向的内容是常量, 不能改变, 不信你试试:

char* p = "This is the penalty!";
*p = 't';

所以声明指向常量字符串的指针时最好这样:

const char* p = "...";

另外任何出现在程序中以""括起的内容如果不是被存储在变量中那么它就是常量, 和上面的p1指向的类型相同, 比如:

printf("abc %d", 1);

其中的"abc %d"也是常量;
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网