c++的char []和char *的区别

淺唱寂寞╮ 提交于 2019-11-29 21:29:21

#include<iostream>

using namespace std;

int main() {

  char *p1 = "abcd";

  char p2[] = "1234";

  return 0;

}

 

这二者的区别还在于:
1. p1是一个指针变量,有一块内存存储它,它的内容是字符串的地址,那么我们要访问字符串就先要取出p1中存储的地址,然后计算偏移量,进行访问
2. 不同于p1,p2直接是字符串的地址,可直接访问

“abcd”在常量区分配了内存存储,栈上分配一地址给p1并指向“abcd”,那么如果在后面的代码中改变了“abcd”,自然崩溃。所以,需要加上const限定。

但是说到底,为什么改变p1就是危险的,字符数组的内容就能随意改变呢?这是因为“abcd”是在编译时刻就确定的,而“1234”是在运行时刻赋值的。所以,编译器在编译时就已经知道p1指向的是常量,他并不希望你改变,但是数组不同,可以说他只是个存储的工具,编译器编译时并不知道它里面是什么。

但在往后的存取中,在栈上的数组比指针所指向的字符串是要快的。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!