C/C++字符串变量的声明方式差异
常见的字符串声明形式有如下形式:*char str1[16] ,char str1,char str[]
这三种声明形式内在有何不同,下面进行实验:
代码如下:
#include <iostream>
using namespace std;
char *StrLab1();
char *StrLab2();
char *StrLab3();
int main()
{
char *p1 = StrLab1();
char *p2 = StrLab2();
char *p3 = StrLab3();
cout << "p1 = " << p1 << endl;
cout << "p2 = " << p2 << endl;
cout << "p3 = " << p3 << endl;
}
char *StrLab1() {
char str1[16] = "I am str1"; //自动变量,在栈中----- 函数返回后,内存释放,"I am str1"不存在
char *p1 = str1;
cout << p1 << endl;
return p1;
}
char *StrLab2() {
char *str2 = "I am str2"; //常量存储区--------- 函数返回后,在代码段中,"I am str2"存在
char *p2 = str2;
cout << p2 << endl;
return p2;
}
char *StrLab3() {
char str3[] = "I am str3"; //自动变量,在栈中----- 函数返回后,内存释放,"I am str3"不存在
char *p3 = str3;
cout << p3 << endl;
return p3;
}
实验结果:
I am str1
I am str2
I am str3
p1 = ╔
p2 = I am str2
p3 =
Process finished with exit code 0
结论
形式1:char str1[16]
char str1[16] = “I am str1”;
自动变量,在栈中,函数返回后,内存释放,"I am str1"不存在。
形式2:char *str2
char *str2 = “I am str2”;
常量存储区, 函数返回后,在代码段中,"I am str2"存在。
形式3:char str3[]
char str3[] = “I am str3”;
自动变量,在栈中,函数返回后,内存释放,"I am str3"不存在。