#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指向的是常量,他并不但愿你改变,可是数组不一样,能够说他只是个存储的工具,编译器编译时并不知道它里面是什么。编译
但在日后的存取中,在栈上的数组比指针所指向的字符串是要快的。