C语言第17天,字符串与字符指针,const关键词

1.字符串常量不可修改

#include<stdio.h>

int main()

{char*pStr="HelloWorld\n";

printf("%s",pStr);

pStr[0]='h';//将H变为h

printf("%s",pStr);

return 0;}

我们知道字符串常量实际上是一个字符数组,因此"HelloWorld\n"的类型为char[12]的字符数组。

而数组出现在表达式中,将转换为指向首元素的指针char*。即pStr指向字符串常量的第一个元素'H'。之后,我们尝试将第一个字符从'H'修改为'h'。运行后程序报错了。

结论:字符串常量是常量,而常量不能被修改。

 

2.正确初始化字符数组

//初始化列表长度小于字符数组长度

char str1[10]={'H','e','l','l','o'};//前5个元素被初始化为'H'、'e'、'l'、'l'、'o',其后所有的元素填0

char str2[10]={'H','e','l','l','o','\0'};//\0可以正常结尾

 

//初始化列表等于字符数组长度

char str3[6]={'H','e','l','l','o','\0'};//正常结尾

char str4[5]={'H','e','l','l','o'};//没有\0的位置,无法正常结尾

 

//使用字符串初始化字符数组

char str5[10]="Hello";//正常结尾

char str6[6]="Hello";//正常结尾

char str7[5]="Hello";//没有\0的位置,无法正常结尾

 

//省略字符数组大小

char str8[]={'H','e','l','l','o','\0'};//正常结尾

char str9[]={'H','e','l','l','o'};//没有\0无法正常结尾

char str10[]="Hello";//正常结尾,字符数组长度由字符串常量决定。字符数组长度为6。使用字符串常量初始化字符数组。

 

3.字符数组可修改

#include<stdio.h>

int main()

{char str[]="HelloWorld\n";

printf("%s",str);

 

str[0]='h';

printf("%s",str);

return 0;}

结果修改成功,所以字符数组str是可以被修改的。

 

4.字符数组与指针

#include<stdio.h>

int main()

{char str[]="helloworld";

puts(str);

for(int i=0;str[i] !='\0'; i++)

{str[i] - =32;}

puts(str);

return 0;}

结果为helloworld

HELLOWORLD

 

此外,我们还可以获取字符数组的首元素指针,通过指针的加法来访问并修改这个字符数组。

#include<stdio.h>

int main()

{char str[]="helloworld";

char*p=str;

while(*p!='\0')

{*p -= 32; p++;}

puts(str);

return 0;}

指针p为一个移动的游标,依次指向数组中的每一个元素。循环结束后,指向字符'\0'。

 

5.使用指针处理字符串

将字符串"dlrowolleh"倒转过来,还原为"helloworld"。

#include<stdio.h>

int main()

{char str[]="dlrowolleh";

puts(str);

//使用两个指针,pHead指向首元素'd',pTail指向尾部的'h'。

char*pHead=str;

char*pTail=str;

 

while(*pTail)

{pTail ++;}//指向末尾

pTail --;

while(pHead<=pTail)

{char tmp=*pHead;

*pHead=*pTail;

*pTail=tmp;//交换位置

pHead ++;//前进1

pTail --;}//后退1

 

puts (str);

return 0;}

 

6.const关键词

const char str[20]="hello\n";

printf("%s",str);

str[0]='H';

printf("%s",str);

我们发现加上const后,h无法变为H。

当使用const关键词修饰char,将禁止修改char。数组str的元素char无法被修改,其后的语句如果尝试修改数组元素则编译报错。

注意const关键词是可以加在char旁边的,也就是无论加在左边还是右边,均有这个效果。

 

const修饰指针本身

以第4部分的代码为例,星号*右边增加const关键词

char*const p="hello\n";

那么指针p将无法被修改,hello可以被修改

posted @ 2022-09-24 15:09  纯爱暴打ntr  阅读(133)  评论(0)    收藏  举报