字符数组
上节课我们说到了数组,例子使用了整型数组,这节课我们来说说字符型数组。
声明数组,并用大括号初始化赋值时,是可以不用说明数组长度的(长度会根据大括号内元素的个数决定);但是在数组声明时如果没有马上初始化赋值,就一定需要说明数组长度,且在除了声明(初始化)以外的时候,不能再用大括号来赋值,只能通过下标(如: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个字节)。
今日问题
看来,数组变量名只有在参数传递的时候会被视为指针,而在原本的函数中不是这样,那么这到底是是为什么呢?
领取专属 10元无门槛券
私享最新 技术干货