字符串赋值给指针与数组的区别
2017-08-27 16:16
309 查看
代码
int Test() { // Test1 char str1[] = "hello world"; char str2[] = "hello world"; if (str1 == str2) cout << "str1 equal str2" << endl; else cout << "str1 is not equal to str2" << endl; char *pstr1 = "hello world"; char *pstr2 = "hello world"; if (pstr1 == pstr2) cout << "pstr1 equal to pstr2" << endl; else cout << "pstr1 is not equal to str2" << endl; // Test2 char str3[12]; str3 = "hello world"; //error char *pstr3; pstr3 = "hello world"; return 0; }
Test1结果:
str1 is not equal to str2pstr1 equal pstr2
分析 :
在C++中,常量字符串存储于一块特殊的存储区且仅有一份拷贝,当为pstr1和pstr2赋值相同的字符串常量时候,他们实际上指向相同的内存地址。但用常量初始化数组,情况有所不同。对于数组初始化来说,字符串常量相当于构造函数中的初始化列表,当初始化数组时,会为数组分配相应长度的空间,并把字符串常量复制到数组中去。str1和str2的初始地址不同,因此它们的值也是不同的。
两者类似浅拷贝与深拷贝。
Test2结果:
为str3赋值时候会报错,pstr3却不会。分析:
因为str3是数组名,是指针常量,不能修改。pstr3是普通指针,赋值时,指向内存中的字符串常量的地址。
相关文章推荐
- 字符串赋值 数组与指针的区别
- 如何理解字符串赋值给指针与数组的区别
- iOS  日记2 --字符串赋值给指针与数组的区别
- char a[](字符串数组)和char *a(字符串指针)区别
- c语言中字符串常见初始化时的问题,以及字符串数组与指针区别的分析
- 字符串指针与字符数组的区别
- 指向字符串的指针 和 字符数组的区别
- 字符串初始化指针和初始化数组区别
- 数组和指针的区别、字符数组和字符串指针区别
- 关于数组与指针的应用及区别-针对字符串去左边多余的‘0’字符
- 字符串指针与字符串数组的区别
- 字符串指针和字符数组的区别
- 数组与字符串、字符指针与其他类型指针、赋值参数、指针参数以及引用参数、函数指针
- 字符串数组和字符串指针的区别
- 字符串指针与字符数组的区别
- 字符串数组和字符串指针的区别联系
- 面试题--字符串指针与字符串数组的区别char* st="abc;与char* str[]="abc";的异同
- C 字符串数组和char*指针在做&操作时的区别
- 指针的写法和赋值(指针数组与数组指针的区别)
- 一道二级C题引发的思考-- c++函数传递指针的本质 与 字符串指针与字符数组的区别