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;}
标签:字符,pTail,数组,17,C语言,char,str,字符串,指针 From: https://www.cnblogs.com/mmwl/p/16725690.html