学习
实践
活动
工具
TVP
写文章

字符数组-第十一课

字符数组

上节课我们说到了数组,例子使用了整型数组,这节课我们来说说字符型数组

声明数组,并用大括号初始化赋值时,是可以不用说明数组长度的(长度会根据大括号内元素的个数决定);但是在数组声明时如果没有马上初始化赋值,就一定需要说明数组长度,且在除了声明(初始化)以外的时候,不能再用大括号来赋值,只能通过下标(如:char[0]='L';)来赋值。

字符串

字符型数组,看来大家也掌握了呢!接下来我们来认识字符串

双引号中的内容就是我们的字符串。字符串的本质就是字符型数组。字符串和字符型数组之间的微妙差别在于“哨兵字符”

因为C语言无法确切地知道数组的长度,如果C语言想在屏幕上显示字符串,它就需要知道什么时候会到达字符数组的尾部,为此C语言加入了哨兵字符。

哨兵字符是一个出现在字符串末尾的附加字符,它的值为\0(\0就是ASCII表中的第一个字符,对应的十进制值为0,对应的字符是空(NULL)字符)。每当计算机需要读取字符串的内容时,它会逐一扫描字符数组中的所有元素,直到碰到\0

也就是说当计算机看到“LOVE”这个字符串时,存储器中实际保存的是:

这也就是为什么我们输出字符串cs占用的字节数为5的原因。

字符数组的传递

今天的最后,我们来看看,我们将字符数组作为参数传递会发生什么事。

会出现警告:在函数pfname()中,'sizeof'返回的将会是字符型指针的大小。

我们上节课也学过,数组变量名可以当做指针使用,所以当我们调用pfname()函数时,传递的name就被计算机当成了指针。

printf("%s",

);格式化打印字符串时,接收的参数

就是一个字符数组的指针(指向字符数组在内存中的起始位置),所以我们可以打印出name的内容。但是sizeof(name)输出的是字符数组指针的大小(因为作者的gcc版本是32位的,所以虽然电脑是64位系统,但是指针还是4个字节)。

今日问题

看来,数组变量名只有在参数传递的时候会被视为指针,而在原本的函数中不是这样,那么这到底是是为什么呢?

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180711G14VSY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券