[讨论]char* a = "abc" 和 char a[] = "abc" 之间的区别
如题:我是这样理解的,大家看对不对
1、char* a = "abc"; 声明了一个字符类型的指针a,并为它赋值初始值为"zhf"其中字符串"zhf"应属于全局静态存储区,这里对a[1] = 'k',在编程中会出错,高手解释一下为什么?这里 a = null,可以,容易理解,因为a是指针类型。
2、char a[] = "abc"; 声明了一个字符型数组,并赋初值。这里的字符串"zhf"应该是属于堆存储区,是在局部开辟的空间。所以,这里对a[1] = 'k';是正确的。由于数组类型a相当于一个const型的指针,所以a = null;会出错。
欢迎高手纠正、补充。
----------------解决方案--------------------------------------------------------
糟糕```我对储存和```堆饯一点不知道啊```但是我能说的就是 :
char *a = "abc" ; 后 a的值是"abc"这个字符串的首地址``
char a[] = "abc"; 后 a[]={'a','b','c','\0'}
----------------解决方案--------------------------------------------------------
char *a="abc" --》a中存放的是"abc"这个字符串的首地址( 第一个字符的地址 )
也可以这样表示
char *a;
char b[]="abc";
a=&b[0];
是一样
----------------解决方案--------------------------------------------------------
如果字符串是这样声明的:char *a="abc",然后a[1]='k'会有发生运行错误,而如果字符串这样声明:char a[]="abc",a[1]='k'却无错误?
[此贴子已经被作者于2007-9-19 21:10:09编辑过]
----------------解决方案--------------------------------------------------------
好问题 等待高手
----------------解决方案--------------------------------------------------------
char *a="abc",然后a[1]='k'会有发生运行错误,
这里a是指针变量 a[1] 是什么 当然错了
而如果字符串这样声明:char a[]="abc",a[1]='k'却无错误?
这里a是数组 a[1]='k' 没问题
----------------解决方案--------------------------------------------------------
我觉得这样声明没问题: char *a="abc",a代表一个字符串"abc"的的首地址,a[1]代表该字符串的第2个字符也就是字符'b',a[1]相当于*(a+1)
[此贴子已经被作者于2007-9-19 21:45:29编辑过]
----------------解决方案--------------------------------------------------------
char *a="abc"没有为字符串分配内存。。。
----------------解决方案--------------------------------------------------------
8楼的是谁?
是本人我就详细分析这个问题。
----------------解决方案--------------------------------------------------------
*(a+1)='k';
----------------解决方案--------------------------------------------------------