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可以被修改
                    
                
                
            
        
浙公网安备 33010602011771号