char *a1 = "abc"; 和 char a2[] = "abc";的差别,void fun(char * a)函数,为什么参数是a2正确,a1错误呢
展开全部
char *a1 = "abc";
这是定义了一个指向字符串常量的指针
char a2[] = "abc";
这是定义了一个有4个元素的字符数组
另外,如果只看函数原型的话void fun(char * a),形参a对应的实参既可以是a1,也可以是a2,前提是只看函数原型的话,但是具体的情况还要看函数定义中对形参的处理才可以
如果存在对形参a赋值的话,那么a1就不可以,指针指向的是存储在常量区的字符串常量,是不可被修改的
另外,即便是a2也要注意数组越界的问题
这是定义了一个指向字符串常量的指针
char a2[] = "abc";
这是定义了一个有4个元素的字符数组
另外,如果只看函数原型的话void fun(char * a),形参a对应的实参既可以是a1,也可以是a2,前提是只看函数原型的话,但是具体的情况还要看函数定义中对形参的处理才可以
如果存在对形参a赋值的话,那么a1就不可以,指针指向的是存储在常量区的字符串常量,是不可被修改的
另外,即便是a2也要注意数组越界的问题
展开全部
1
char *a1 = "abc"; //这个不能通过a1来修改字符串的内容。
char a2[] = "abc";//这个可以在程序中修改字符串的值,比如,将"abc"改为"def"。
2
char *a1 = "abc"; //表示定义一个字符指针,指向字符串"abc"首地址。
char a2[] = "abc";//表示定义一个字符数数,有四个元素,第一个元素值为'a',最后一个元素值为'\0'。
char *a1 = "abc"; //这个不能通过a1来修改字符串的内容。
char a2[] = "abc";//这个可以在程序中修改字符串的值,比如,将"abc"改为"def"。
2
char *a1 = "abc"; //表示定义一个字符指针,指向字符串"abc"首地址。
char a2[] = "abc";//表示定义一个字符数数,有四个元素,第一个元素值为'a',最后一个元素值为'\0'。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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是数组名也代表数组的首地址。
所以参数是可以传递的。
#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是数组名也代表数组的首地址。
所以参数是可以传递的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询