本帖最后由 zhs 于 2014-7-9 11:37 编辑
#include <stdio.h>
int main()
{
char arr[]="itcast";
arr[0]='T';
printf("%c\n",arr[0]);//字符串数组创建并初始化及改变数组首个元素值输出
char *p="itcast";
*p='Z';
printf("%c\n",*p);//字符串指针创建并初始化及改变指针变量p所指向的第一个字符的值输出
}
运行结果系统会报错。
原因:字符串指针在初始化时存储在常量区,常量区存储的数据作为常量不能改变,而字符串数组在初始化时存储在栈中,栈用来存储变量,可以被改变。
内存解析:
内存分为:常量区、堆、栈
常量区:存储常用的常量
堆:存储对象
栈:存储变量
综上所述:当初始化的字符串需要改变时,使用字符串数组初始化。当初始化的字符串作为常量不需改变时,使用字符串指针初始化 |
|