黑马程序员技术交流社区
标题:
这两个初始化有什么不同?
[打印本页]
作者:
الغيوم_ا
时间:
2014-7-17 23:21
标题:
这两个初始化有什么不同?
如题。char a[] = "string literal"; char *p="string literal"这两个初始化有什么不同?
作者:
ofVv
时间:
2014-7-18 00:30
本帖最后由 ofVv 于 2014-7-18 00:37 编辑
前者是字符数组变量, 可以修改该字符串里的内容, 相当于为a[]赋初值;
后者是字符串常量, 内容不能修改, 相当于创建一个字符串, 然后将其首地址保存在指针p中.
int main(int argc, const char * argv[])
{
@autoreleasepool {
char a[] = "hello, world";
char *p = "hello, world";
a[1] = 'w';
p[1] = 'w';
printf("%s\n%s", a, p);
}
return 0;
}
复制代码
第9行会报错, EXC_BAD_ACCESS.
作者:
huangqiwa
时间:
2014-7-18 14:33
ofVv 发表于 2014-7-18 00:30
前者是字符数组变量, 可以修改该字符串里的内容, 相当于为a[]赋初值;
后者是字符串常量, 内容不能修改, 相 ...
正解
前者数组名相当于指针常量,数组名不能指向其他地方
后者p是一个指针变量,指向的内容是常量不能够修改,但是可以更改指针p指向其他地方
作者:
Devchen
时间:
2014-7-18 15:39
又学习了
作者:
-(_)-
时间:
2014-7-18 18:41
在内存分配上是不一样的, 前者是数组类型, 用数组来存储每一个字符, 是可以修改的, 后者是指针类型, 内存生成之后是不可以修改的
作者:
且行且惜
时间:
2014-7-18 19:25
一个常量,一个是变量,a是常量,值不可以在变化,而p可以被赋值!
作者:
Melody_cw
时间:
2014-7-19 16:55
这俩都是定义字符串的方法,前者里面的字符串里面的字符是可以修改的,后者是一个常量字符串不可以修改
作者:
云霄之上
时间:
2014-7-19 20:59
你可以把前者看做是字符串变量 可变 ,后者看做是字符串常量 不可变
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2