char *a1 = "abc"; 和 char a2[] = "abc";的差别,void fun(char * a)函数,为什么参数是a2正确,a1错误呢

rt函数中有a++和对*a的赋值操作... rt
函数中有a++和对*a的赋值操作
展开
 我来答
shine1991
科技发烧友

2012-04-08 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
char *a1 = "abc";
这是定义了一个指向字符串常量的指针

char a2[] = "abc";
这是定义了一个有4个元素的字符数组

另外,如果只看函数原型的话void fun(char * a),形参a对应的实参既可以是a1,也可以是a2,前提是只看函数原型的话,但是具体的情况还要看函数定义中对形参的处理才可以

如果存在对形参a赋值的话,那么a1就不可以,指针指向的是存储在常量区的字符串常量,是不可被修改的
另外,即便是a2也要注意数组越界的问题
sun_siliang
2012-04-08 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4517万
展开全部
1
char *a1 = "abc"; //这个不能通过a1来修改字符串的内容。
char a2[] = "abc";//这个可以在程序中修改字符串的值,比如,将"abc"改为"def"。

2
char *a1 = "abc"; //表示定义一个字符指针,指向字符串"abc"首地址。
char a2[] = "abc";//表示定义一个字符数数,有四个元素,第一个元素值为'a',最后一个元素值为'\0'。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Negamax
2012-04-08 · TA获得超过2721个赞
知道小有建树答主
回答量:656
采纳率:100%
帮助的人:282万
展开全部
#include "stdio.h"
#include "conio.h"

void f(char *a)
{
printf("%c\n",*a);
printf("%c\n",*(a+1));
}

main()
{
char *a1 = "abc";
char a2[] = "abc";
f(a1);
f(a2);
getch();
}

上面的测试代码的运行结果 (DEV_C++平台)
a
b
a
b

测试是没有问题的。
char *a1=“abc" 是等于”abc"这个字符串的首地址的。
a2是数组名也代表数组的首地址。
所以参数是可以传递的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式