C语言指针数组问题

我想问一下char*a={"abc"};跟chara[]={"abc"};2者有什么区别?区别在哪?... 我想问一下
char *a={"abc"};

char a[]={"abc"};
2者有什么区别?区别在哪?
展开
 我来答
l521088816
2013-02-08 · TA获得超过1772个赞
知道小有建树答主
回答量:780
采纳率:0%
帮助的人:1054万
展开全部
我所知道的区别就是:
前者字符串元素不能被进行赋值运算(只能使用它已经初始化后的值,感觉就跟一串常数差不多了),否则会出现错误
而后者可以随意赋值
jinkehouse
2013-02-08 · TA获得超过312个赞
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:150万
展开全部
执行char *a={"abc"};时,编译器先把"abc"放在内存里一个连续的地址内,然后让a指向它们的首地址,也就是'a'的地址.

而char a[]={"abc"};是先开拓一个a[3]的内存(占4字节,包括'\0'),然后把a,b,c存进去
追问
但是char a[]={"abc"};  单独一个a不是也是等于一个指向a[0]的指针么?
追答
单独一个a也指向a[0],但是这个和*a不一样的,单独a是数组名,它不能改变指向,比如a++;就错了,但是*a是可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pangzibaibai
2013-02-08 · TA获得超过148个赞
知道小有建树答主
回答量:110
采纳率:0%
帮助的人:77.3万
展开全部
说几点c语言讲不到的吧。。。

首先 指针a,数组a以及他其中的内容abc,都存放在内存的栈区,然而指针a后面的“abc”都存放在内存的常量区,放在常量区的是不可以修改的。
再其次,a[4]={"abcd"}, 数组名是指向字符首地址的指针,也就是如你所说的,是指向a[0]的。。。
再者,他们说的可修改内容与否,你只需要了解即可,不需要知道为什么,以后会学到的。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
2013-02-08 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5597万
展开全部
char *a={"abc"}; a 是指针。
char c[]={"abc"}; c 是数组。
初始化后 sizeof(a) 为 4,strlen(a) 为3。
同样,sizeof(c) 为 4,strlen(c) 为3。

在语句中有时一样,有时不一样。

例如:
char *a={"abc"};
char c[]={"abc"};
char b[]={"123"};
int L;
L = sizeof(a);
printf("a: %d %s\n",L, a);

a=b; // a 允许
L = sizeof(a);
printf("a: %d %s\n",L, a);

L = sizeof(c); // a,c 方法一样
printf("c: %d %s\n",L, c); // a,c 方法一样

// wrong c=b; // c 不允许
strcpy(c,b); // c 只能这样做
L = sizeof(c);
printf("c: %d %s\n",L, c);

注意 a=b; 允许。c=b; 不允许 。 只能 strcpy(c,b);
输出:
a: 4 abc
a: 4 123
c: 4 abc
c: 4 123
追问
char c[]={"abc"};    单独一个c是指向c[0]的指针么?
追答
是的。单独一个c是 &c[0]。不能做“左值”。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
stagezm
2013-02-08 · TA获得超过111个赞
知道答主
回答量:105
采纳率:0%
帮助的人:67万
展开全部
第一个是指针
第二个是数组
追问
第一个是指针  但是第二个也是指针吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式