黑马程序员技术交流社区
标题:
字符串数组及字符串指针初始化区别及应用
[打印本页]
作者:
zhs
时间:
2014-7-9 09:49
标题:
字符串数组及字符串指针初始化区别及应用
本帖最后由 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所指向的第一个字符的值输出
}
运行结果系统会报错。
原因:字符串指针在初始化时存储在常量区,常量区存储的数据作为常量不能改变,而字符串数组在初始化时存储在栈中,栈用来存储变量,可以被改变。
内存解析:
内存分为:常量区、堆、栈
常量区:存储常用的常量
堆:存储对象
栈:存储变量
综上所述:当初始化的字符串需要改变时,使用字符串数组初始化。当初始化的字符串作为常量不需改变时,使用字符串指针初始化
作者:
★Joean_Zhou
时间:
2014-7-9 10:11
分析的很透彻,嘿嘿
作者:
Très
时间:
2014-7-9 11:39
分析的很到位,学习了!
作者:
完美世界
时间:
2014-7-9 15:25
我用xcode 编译链接都没有问题,运行也可以输出结果为:
T
Bus error:10
有没有知道这什么意思的?
作者:
fantacyleo
时间:
2014-7-9 15:29
完美世界 发表于 2014-7-9 15:25
我用xcode 编译链接都没有问题,运行也可以输出结果为:
T
Bus error:10
:L lz的程序本来就没法运行啊,他就是要证明字符串常量是不可以修改的。*p='z'是非法操作
作者:
zhs
时间:
2014-7-9 15:46
完美世界 发表于 2014-7-9 15:25
我用xcode 编译链接都没有问题,运行也可以输出结果为:
T
Bus error:10
是会输出T,因为输出T的赋值改变的是字符串数组,初始化的字符串数组的值是可以改变的。而第二个错误是因为程序要把'Z'赋值给字符串指针中的值,而初始化的字符串指针的值是不能改变的,所以报错
作者:
hm123tinghai
时间:
2014-7-9 16:12
学习一下。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2