二者在内存中的位置肯定是不同的,前者是字符型数组,是将字符串放到了这个数组中,分配在内存的栈区域,而后者则是将字符型指针指向此字符串,是将字符串的首地址赋给了指针p,但是字符串是在内存的程序区,这是二者的区别,从访问机制上来说,数组用下标运算符“[ ]”进行值访问,例如a[0]值为h,a[1]值为e;指针则是需要用反向引用运算符进行值访问“*”例如:*p值为h *(p+1)值为e。
位置不同char a[100] 在栈上分配了数组的空间,可读,可写char *p = "hello", 字符串的空间在常量区分配,只读严谨的写法应该是:const char *p = "hello"; C/C++为了兼容历史代码,才允许写成char *p = "hello";但一旦试图写入这个空间,操作系统(DOS不算啊)会捕捉这个错误的
区别之一: a[100] =''hello''; 分配100个字节内存,而char *p = ''hello'' 只分配6个字节内存 区别之二: 前者所存的内容可以改变(例如a[3]='A'; OK),而后者则不可以(例如p[3]='A'; Error)。
char a[100]表示字符串一维数据组。他表示把字符串“hello”存储到char a[100]里面。后面的char *p表示先找到存储字符串“hello”的地址,然后从里面把字符串取出来。正如1L所说,访问方式不同