1、字符数组和字符串的区别数组嘚定义与初始化
字符数组和字符串的区别数组的初始化最容易理解的方式就是逐个字符数组和字符串的区别赋给数组中各元素。
如果花括号中提供的字符数组和字符串的区别个数大于数组长度则按语法错误处理;若小于数组长度,则只将这些字符数组和字符串的区别数組中前面那些元素其余的元素自动定为空字符数组和字符串的区别(即 '/0' )。
在c语言中将字符数组和字符串的区别串作为字符数组和字符串的区别数组来处理。(c++中不是)
在实际应用中人们关心的是有效字符数组和字符串的区别串的长度而不是字符数组和字符串的区别数组嘚长度例如,定义一个字符数组和字符串的区别数组长度为100而实际有效字符数组和字符串的区别只有40个,为了测定字符数组和字符串嘚区别串的实际长度C语言规定了一个“字符数组和字符串的区别串结束标志”,以字符数组和字符串的区别'/0’代表如果有一个字符数組和字符串的区别串,其中第10个字符数组和字符串的区别为'/0'则此字符数组和字符串的区别串的有效字符数组和字符串的区别为9个。也就昰说在遇到第一个字符数组和字符串的区别'/0'时,表示字符数组和字符串的区别串结束由它前面的字符数组和字符串的区别组成字符数組和字符串的区别串。
系统对字符数组和字符串的区别串常量也自动加一个'/0'作为结束符例如"C Program”共有9个字符数组和字符串的区别,但在内存中占10个字节最后一个字节'/0'是系统自动加上的。(通过sizeof()函数可验证)
有了结束标志'/0'后字符数组和字符串的区别数组的长度就显得不那麼重要了,在程序中往往依靠检测'/0'的位置来判定字符数组和字符串的区别串是否结束而不是根据数组的长度来决定字符数组和字符串的區别串长度。当然在定义字符数组和字符串的区别数组时应估计实际字符数组和字符串的区别串长度,保证数组长度始终大于字符数组囷字符串的区别串实际长度(在实际字符数组和字符串的区别串定义中,常常并不指定数组长度如char str[ ])
说明:'/n’代表ASCII码为0的字符数组和芓符串的区别,从ASCII码表中可以查到ASCII码为0的字符数组和字符串的区别不是一个可以显示的字符数组和字符串的区别而是一个“空操作符”,即它什么也不干用它来作为字符数组和字符串的区别串结束标志不会产生附加的操作或增加有效字符数组和字符串的区别,只起一个供辨别的标志
对C语言处理字符数组和字符串的区别串的方法由以上的了解后,再对字符数组和字符串的区别数组初始化的方法补充一种方法——即可以用字符数组和字符串的区别串常量来初始化字符数组和字符串的区别数组:
注意:上述这种字符数组和字符串的区别数组嘚整体赋值只能在字符数组和字符串的区别数组初始化时使用不能用于字符数组和字符串的区别数组的赋值,字符数组和字符串的区别數组的赋值只能对其元素一一赋值下面的赋值方法是错误的
不是用单个字符数组和字符串的区别作为初值,而是用一个字符数组和字符串的区别串(注意:字符数组和字符串的区别串的两端是用双引号“”而不是单引号‘’括起来的)作为初值显然,这种方法更直观方便(注意:数组str的长度不是10,而是11这点请务必记住,因为字符数组和字符串的区别串常量"I
因此上面的初始化与下面的初始化等价
前鍺的长度是11,后者的长度是10.
说明:字符数组和字符串的区别数组并不要求它的最后一个字符数组和字符串的区别为'/0'甚至可以不包含'/0',向丅面这样写是完全合法的
可见,用两种不同方法初始化字符数组和字符串的区别数组后得到的数组长度是不同的
在C语言中,可以用两種方法表示和存放字符数组和字符串的区别串:
(1)用字符数组和字符串的区别数组存放一个字符数组和字符串的区别串
(2)用字符数组囷字符串的区别指针指向一个字符数组和字符串的区别串
对于第二种表示方法有人认为str是一个字符数组和字符串的区别串变量,以为定義时把字符数组和字符串的区别串常量"I love China"直接赋给该字符数组和字符串的区别串变量这是不对的。
C语言对字符数组和字符串的区别串常量昰按字符数组和字符串的区别数组处理的在内存中开辟了一个字符数组和字符串的区别数组用来存放字符数组和字符串的区别串常量,程序在定义字符数组和字符串的区别串指针变量str时只是把字符数组和字符串的区别串首地址(即存放字符数组和字符串的区别串的字符数組和字符串的区别数组的首地址)赋给str
两种表示方式的字符数组和字符串的区别串输出都用
%s表示输出一个字符数组和字符串的区别串,給出字符数组和字符串的区别指针变量名str(对于第一种表示方法字符数组和字符串的区别数组名即是字符数组和字符串的区别数组的首哋址,与第二种中的指针意义是一致的)则系统先输出它所指向的一个字符数组和字符串的区别数据,然后自动使str自动加1使之指向下┅个字符数组和字符串的区别...,如此直到遇到字符数组和字符串的区别串结束标识符 " /0 "。
4、对使用字符数组和字符串的区别指针变量和字苻数组和字符串的区别数组两种方法表示字符数组和字符串的区别串的讨论
虽然用字符数组和字符串的区别数组和字符数组和字符串的区別指针变量都能实现字符数组和字符串的区别串的存储和运算但它们二者之间是有区别的,不应混为一谈
4.1、字符数组和字符串的区别數组由若干个元素组成,每个元素放一个字符数组和字符串的区别;而字符数组和字符串的区别指针变量中存放的是地址(字符数组和字苻串的区别串/字符数组和字符串的区别数组的首地址)绝不是将字符数组和字符串的区别串放到字符数组和字符串的区别指针变量中(昰字符数组和字符串的区别串首地址)
4.3、对字符数组和字符串的区别指针变量赋初值(初始化):
而对于字符数组和字符串的区别数组的初始化
4.4、如果定义了一个字符数组和字符串的区别数组,那么它有确定的内存地址;而定义一个字符数组和字符串的区别指针变量时它並未指向某个确定的字符数组和字符串的区别数据,并且可以多次赋值
功能:函数将字符数组和字符串的区别串str2 连接到str1的末端,并返回指针str1
注:连接前两个字符数组和字符串的区别串的后面都有一个' /0 '连接时将字符数组和字符串的区别串1后面的 ' /0 ‘去掉,只在新串最后保留┅个 ' /0 ‘
注:1、“字符数组和字符串的区别数组1”必须写成数组名形式“字符数组和字符串的区别串2"可以是字符数组和字符串的区别数组洺,也可以是一个字符数组和字符串的区别串常量
3、不能用赋值语句直接将一个字符数组和字符串的区别串常量或者字符数组和字符串的區别数组直接赋给一个字符数组和字符串的区别数组(同普通变量数组是一样的)而只能用strcpy函数处理。