C语言,数组名与数组第一个元素的关系
#include<stdio.h>voidmain(){charc[]="abcdef",ca[]="1";printf("%s\n%c\n%s\n%c",c,c,ca,...
#include<stdio.h>
void main()
{
char c[]="abcdef",ca[]="1";
printf("%s\n%c\n%s\n%c",c,c,ca,ca);
getchar();
gets("");
}
此处分别用%s与%c对两个字符串数组进行输出,引用的输出地址都是数组名,然而%s输出效果无误,而%c结果呈现随机,所以用%c必须指明是哪一个字符。
c!=c[0]是真吗?
最重要的是它们的差别在哪里啊?
为何%C对数组名进行输出的时候会是随机的? 展开
void main()
{
char c[]="abcdef",ca[]="1";
printf("%s\n%c\n%s\n%c",c,c,ca,ca);
getchar();
gets("");
}
此处分别用%s与%c对两个字符串数组进行输出,引用的输出地址都是数组名,然而%s输出效果无误,而%c结果呈现随机,所以用%c必须指明是哪一个字符。
c!=c[0]是真吗?
最重要的是它们的差别在哪里啊?
为何%C对数组名进行输出的时候会是随机的? 展开
3个回答
展开全部
数组是多个元素的集合,而其第一个元素只是它的一个部分
当我们定义一个数组时,要用到方括号修饰符, 如
int a[10];
这也就决定了它的类型为int [10],但其元素的类型却为int
区别:
而C中的指针和数组实际上十分类似(但数组的指针为常量),所以当你尝试用整型(若要用printf完整输出应该用“%ld”格式化)的格式输出一个数组时,一般会输出一个-9223372036854775807 ~ 9223372036854775807的整数,其实质是数组的起始位置的指针。(注意,输出的范围根据cpu的位数而不同,以上为64位输出的结果)
而当你用a[0]来使用第一个元素时,其类型为int
关系:
在区别中已经提到,指针和数组十分类似,也就是说可以用用于指针的一元运算符”解引用“(*)来获得一个数组的第一个元素。
也就是说,一下两个表达式是等效的
a[0]
*a
那么同理,我们也可以用“取地址“运算符(&)来获取第一个元素的地址,也就是数组的地址(注意,这里的等号不是赋值语句,只是表示左右两个表达式等效)
a = &a[0]
展开全部
是真的
c==&c[0]
也就是说数组名实际是数组首地址
所以用%c输出c时,只是将数组首地址的低8位作为字符输出,由于地址是随机的,所以输出结果也是随机的
c==&c[0]
也就是说数组名实际是数组首地址
所以用%c输出c时,只是将数组首地址的低8位作为字符输出,由于地址是随机的,所以输出结果也是随机的
追问
请问你的意思是说C本身有个地址,存放的是C[0]的地址吗?
那么C本身是个常量指针,是二级指针,指向的是C[0]的地址?
追答
可以这样认为
C本身是个常量指针,是二级指针,指向的是C[0]的地址
这句话应该不对,c与常量指针基本等价,但不是二级指针,就是个一级常量指针,其值等于C[0]的地址,或者说就是C[0]的地址
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主要有如下区别:
1、数组名代表数组的首地址,若c[]="abcdef",则数组名c代表数组元素'a'的地址。
2、%s用于输出一个字符串,对应的参数是数组名(即数组的首地址)。输出从数组起始位置到数组中第一个'\0'之间的全部字符。
2、%c用于输出一个字符,即字符的值。而数组名是数组的首地址,即&c[0],程序运行时,为数组分配的存储单元是随机的,即每次运行&c[0]的值是不同的,故把它作为ASCII值对应到相应的字符也是随机的。若想输出数组第一个元素的值,可以用c[0],即printf("%c",c[0]);
1、数组名代表数组的首地址,若c[]="abcdef",则数组名c代表数组元素'a'的地址。
2、%s用于输出一个字符串,对应的参数是数组名(即数组的首地址)。输出从数组起始位置到数组中第一个'\0'之间的全部字符。
2、%c用于输出一个字符,即字符的值。而数组名是数组的首地址,即&c[0],程序运行时,为数组分配的存储单元是随机的,即每次运行&c[0]的值是不同的,故把它作为ASCII值对应到相应的字符也是随机的。若想输出数组第一个元素的值,可以用c[0],即printf("%c",c[0]);
追问
所以%C就把C里面所存储的C[0]的地址当作ASCII值,输出相应的字符啦?
谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询