c语言中为什么char *a;

c语言中为什么char*a;scanf("%s",a);是错的啊,一定要定义数组chara[10];吗?不是可以这样定义的吗,char*a="helloworld";那为... c语言中为什么
char *a;
scanf("%s",a);是错的啊,
一定要定义数组char a[10];吗?
不是可以这样定义的吗,char *a="hello world";
那为什么最上面的是错的啊,求大虾告知,小弟初学c语言
展开
 我来答
dd19880510
推荐于2018-01-22 · TA获得超过4643个赞
知道小有建树答主
回答量:162
采纳率:100%
帮助的人:239万
展开全部
char *a是声明了一个指向char类型的指针变量;
此时,a并没有被初始化,没有被指向任何数据;
所以此时scanf("%s", a)是错误的,a此时只是一个空指针,而且你也不能向一个指针变量中存储非地址类型之外的数据;
这就相当于:
你要帮你朋友(char *a所指向的对象)买某一个类型的商品;
这个商品名字叫“%s”;
但是你却没告诉计算机怎么联系(char *a所指向的对象)

char *a = "hello world"; 并不是原始写法,是一种简化写法,等同于:
char x[] = "hello world";
char *a;
a = x;
好处除了一句话干了三句话的事情之外,还少用了一个中间变量(数组名本身就是一个指针变量)

此外,最原始的C,如果你写下:
char x[] = "hello world";
char y[] = "hello world";
char *a = x;
char *b = y;
此时,a、b变量本身是独立开的,可区分的,但是他们所指向的内存地址却是一个,这是C语言的一个特性,在编译时,会将相同的字符串合并起来创建,以此来节省空间,以C为原型的一些语言,比如obj-c也保留了这个特性;
百度网友73e1ff8
2013-09-13 · 超过25用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:55.7万
展开全部
char 本来就是用来接字符的,并且是单个字符,长度只占1个字节。正常我们输入是
char a;
scanf("%s",&a);
char定义时用单引号,只能有一个字母,数字。char c='c'。
所以如果你想用char保存字符,就得用数组了。建议使用string……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
枫若神明
2013-09-13 · TA获得超过920个赞
知道小有建树答主
回答量:179
采纳率:0%
帮助的人:240万
展开全部
char *a;分配了一个指针,但是没有给它分配存放数据的空间大小。就像酒店老板预计要造5个房间,为101,102,103,104,105,房间号是有了,但是要把具体的房间给造出来。如果没有造房间,空有房间号,顾客是无法住的。
char *a="hello world"; 这个就相当于本来就造好了一个房间,现在只是把这个房间挂个号叫101。
明白了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿波罗的同行者
2018-09-30 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:69
采纳率:50%
帮助的人:39.2万
展开全部
char*a="abcd"; 中a指针指向的地址存储的内容"abcd"为字符串常量,是放在静态存储区;
char a[10]; 存储的内容放在栈上;
用scanf 进行输入操作时,只能修改栈中的变量值,静态存储区的常量值不能被修改,所以会报内存错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
烟火夜空
推荐于2017-10-10 · TA获得超过6623个赞
知道大有可为答主
回答量:1678
采纳率:93%
帮助的人:563万
展开全部
C语言中,* 除了表示 “乘”外,还表示 “指针”的意思。
这个 char *a 就是定义 a 为 指针类型,指向 的内容 为 char 型的 数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式