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

#include<iostream> ios

using namespace std; 数组

int main() { 工具

  char *p1 = "abcd"; spa

  char p2[] = "1234"; 指针

  return 0;内存

}字符串

 

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

“abcd”在常量区分配了内存存储,栈上分配一地址给p1并指向“abcd”,那么若是在后面的代码中改变了“abcd”,天然崩溃。因此,须要加上const限定。io

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

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

相关文章
相关标签/搜索