C语言——字符数组/字符串/字符指针变量

均从谭浩强的书上所学,以后有看到其他书会补充完善。

字符串是存放在字符数组中的

1.定义

char c[10];

2.初始化

char c[10]={‘C’,’h’,’i’,’n’,’a’};

//如果初值个数小于数组长度,其余的元素自动定为空字符’\0’

char c[]={‘C’,’h’,’i’,’n’,’a’};

//数组长度为5

char c[10]={“China”};

//前5个元素为China,第6个元素为’\0’,其余4个为’\0’

char c[]={“China”};

//此时数组c的长度为6,系统在字符串常量的最后加上了空字符’\0’

3.字符数组的输入输出

①逐个字符输入输出

printf(“%c”,c[0]);

scanf(“%c”,c[0]);

②将字符串一次输入或者输出

printf(“%s”,c);

//scanf中的输入项如果是字符数组名,不要加地址符&

scanf(“%s”,c);

//例如输入:China,系统会动在China后面加一个’\0’

scanf(“%s%s%s”,str1,str2,str3);

//例如输入How are you?空格作为分隔符相当于How\0are\0you?\0

4.字符串处理函数

1.puts(字符数组)

作用:将一个字符串(以’\0’结束的字符序列)输出到终端

puts(c);

2.gets(字符数组)

作用:从终端输入一个字符串到字符数组

gets(c);

//结尾加上’\0’

3.strcat(字符数组1,字符数组2)

作用:把字符串2接到字符串1的后面,结果放在字符串1中

strcat(str1,str2);

//字符数组1必须足够大,以便容纳连接后的新字符串

//连接时取消字符串1后的’\0’,只在新串最后保留“’\0’

4.strcpy(字符数组1,字符串2)

作用:将字符串2复制到字符数组1中

//如果在复制前未对str1数组初始化或者复制,则str1个字节中的内容是无法预知的,复制时将str2的字符串和其后的’\0’一起复制到str1中,取代str1中的前面6个字符,最后4给人字符并不一定是’\0’,而是str1中原有的最后4个字节的内容

//strcpy函数将一个字符串复制到另一个字符数组中去,用赋值语句智能将一个字符赋给一个字符型变量或字符数组元素

//可以用strcpy()将字符串2中前面n个字符复制到字符数组1中去strcpy(str1,str2,2);

5.strcmp(字符串1,字符串2)

作用:比较字符串1和字符串2

//全部相同则认为两个字符串相等

//若出现不同,则以第1个不相同的字符的比较结果为准

5.字符串的引用方式

①用数组名和下标,如c[4] ,也可用数组民和格式声明如“%s”输出该字符串

②用字符指针变量指向一个字符串常量,通过字符指针变量引用字符串

字符指针变量

*p,p是地址,*取p地址中的变量

&p,p是变量,&取p变量的地址

1.定义

char * s;

2.初始化

char * s=“I love China!”;

等价于

char * s;//定义一个char *型变量

s=“I love China!”;//把字符串第1个元素的地址赋给字符指针变量s

//s是指针变量,基本类型为字符型。s只能指向一个字符型数据,不能指向多个字符型数据。

3.字符串中字符的存取

①下标法

char a[]=“I love China!”;

*(a+2)//a是首地址*(a+2)相当于a[2]

②指针变量法

char a[]=“I love China!”;

char * p;

p=a;

//用*p表示

p++;

字符指针变量和字符数组的比较 

1.初始化

指针变量的初始化:

char * s=“I love China!”;

等价于

char * s;

s=“I love China!”;

字符数组的初始化:

char c[20]=“I love China!”;

不等价于

char c;

c[]=“I love China!”;

//字符数组定义的时候可以对全部元素赋初值,但是不能定义后再用赋值语句对字符数组的全部元素赋值

2.存储单元内容

编译时为字符数组分配若干存储单元,以存放各元素的值,对字符指针变量,只分配一个存储单元

3.概念

字符指针变量的值可以改变,但是它所指向的字符常量是不可以改变的

字符数组的数组名不可以改变,但是字符数组中各元素的值是可以改变的

猜你喜欢

转载自blog.csdn.net/qq_39093164/article/details/85317686