“数组名代表该数组⾸地址(字符数组)”
想了⼀下,还是把字符串和字符数组提出来写。我感觉稍稍有点绕,不过总算绕过了!
这⾥核⼼还是数组名代表该数组的⾸地址。
字符数组的初始化,这个⽐较简单,在声明的时候就可以在后边跟⼀个字符串就⾏了
如:char name[100]="xiaogang";
但是如果你想放在声明语句的下⼀⾏,那么就不能⽤=符号了,要把strcpy这个函数来实现.
在输⼊字符串时,所⽤的字符数组不能写长度
如:scanf(“%s”,name); 这⾥就是理解数组的名字代表它的数组的⾸地址。
进⾏字符数组的复制、连接、⽐较、求长操作时,都不能写长度,因为它实际是在⽐数组的有效长度(字符串的长度),(数组名字这个时候还是该数组的⾸地址(是⼀个地址))
这个还是举例吧
void main()
{
char name[100]={0};
scanf("%s",name);
printf("%d\n",strlen(name)); 这⾥的name还是⼀个地址
//编译器遇到strlen这个函数就知道后边是字符串,
//⽽name只是这个字符串的⾸地址,当它遇到所指向的地址为’\0’就停⽌计数。
}
进⾏字符串的打印时,只需要给⼀个⾸地址,就从该地址所指向字符开始打印,直到所指向的字符为’\0’。
⽽过⾏其它数组类型印时,是不⾏的。
还是例⼦:
字符数组
void main()
{
字符串长度过长char name[100]={0};
scanf("%s",name);
printf("%s\n",&name);
printf("%s\n",&name[2]); //表⽰从输⼊后第3个字符开始打印
}
其它数组
void main()
{
int a[5]={0,1,2,3,4};
printf(a);
}
这⾥是打印不出来,最好通过循环把数组的元素⼀⼀打印
void main()
{
int a[5]={0,1,2,3,4};
int i=0;
for(i=0;i<5;i++)
{
printf(a[i]);
}
}
花了两个⼩时左右,终于理清了。
加⼀点,参数数据传递时。
只是把主调函数的数组地址传到被调函数中去,⽽被调函数的形参的数组声明时最好不写数组长度,但是必须有[]表⽰它是数组。如果要写数组长度,不能⼩于实参的数组长度,否则实参中的数组不能完全传到实参中去。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论