都说字符数组是对字符常量的一份拷贝,而字符指针,是指向字符常量的一个地址。那么事实如何呢?
#include <stdio.h>
#include <stdlib.h>
/*
三行代码明确字符数组与字符指针的关系。
*/
int main(void)
{
char str[] = "Hello world!";
char *pStr = "Hello world!";
printf("str首地址 = %p\n*pstr地址 = %p\n\"Hello world!\"地址 = %p\n",str,pStr,"Hello world!");
return 0;
}
打印结果显示:
str首地址 = 000000000024FE40
*pstr地址 = 0000000000404020
"Hello world!"地址 = 0000000000404020
Process exited normally.
Press any key to continue . . .
通过打印结果可知,字符数组的确不再是原来的字符常量了。而字符指针,依然和原来的字符常量存在于同一地址空间。所以,传言为真。
即:字符数组是对字符常量的一份拷贝,而字符指针,是指向字符常量的一个地址。
所以,如果我们对上面的str
执行移位操作,会编译失败,而对pStr
做移位就是ok的。
* 现象如下:
#include <stdio.h>
#include <stdlib.h>
/*
三行代码明确字符数组与字符指针的关系。
*/
int main(void)
{
char str[] = "Hello world!";
char *pStr = "Hello world!";
printf("str首地址 = %p\n*pstr地址 = %p\n\"Hello world!\"地址 = %p\n",str,pStr,"Hello world!");
// str++; // 出错!因为数组一旦初始化就不能被改变
pStr++;// 正确 !
return 0;
}