索引
我们知道,由于C语言相对来说是较低级的语言,它是没有提供字符串(string)类型的。但是它提供了两种使用字符串的方式。
方式一 字符数组
char str1[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
方式二 字符串常量
char * str2 = "hello";
联系与区别
这两种使用方式有什么联系与区别?
联系:它们都是以字符数组的形式存储的。
区别:
1. 变量及值的类型
str1的类型为”char [6]”,{ ‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’ }的类型也是”char [6]”;
str2的类型为”char *”,”hello”的类型为“const char [6]”。
2. 变量及值的存储位置[生命周期]
假定str1与str2均为局部变量
变量str1及其值在栈空间分配,超出其作用域后,均被释放;
变量str2在栈空间分配,超出其作用域后,空间会被释放,但指向的值”hello”存储在只读数据段,程序结束时释放空间。
可以看出,这两种方式最主要的区别,就是方式二是以常量的形式存储的。
从区别中的第2点能清晰的看出,返回str1是不可以的,因为调用结束后,str1代表的内容已被释放;而返回str2是没有问题的,因为在调用结束后,它所指向空间的内容依然存在。