归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝
骐骥一跃,不能十步;驽马十驾,功在不舍!
目录
引言:
字符串存储在一块连续的空间中,系统自动在串的末尾加字符'\0'作为串的结束标记,只要知道串的起始地址,就可以对串进行处理。利用指针的特点对字符串进行处理非常方便,只要使指针指向字符串的第一个字符,就可以引用字符串或对字符串中的字符进行处理。另外,C 语言允许用字符串常量对指针变量初始化或赋值。
一、用字符指针指向字符串常量:
用字符指针变量指向字符串常量有两种方法,即初始化和赋值。例如:
char *p="Do you know?"/*用字符串初始化字符型指针变量*/
或
char *p;
p="Do you know?";/*将字符串赋值给字符型指针变量*/
用字符串初始化字符型指针变量,实际上是用字符串第一个字符的地址初始化字符型指针变量。将字符串赋值给字符型指针变量也是将字符串第一个字符的地址赋值给字符型指针变量。此时字符型指针变量 p 指向字符串的第一个字符,即*p 的值为字符D
注意:数组名是数组所使用内存空间的起始地址。
二、字符串的引用方式:
字符串通常存储在字符数组中,可以通过字符数组名或指向字符串的字符指针两种方式引用字符串。
1.通过字符数组名引用字符串。
#include<stdio.h>
#include<string.h>
int main(){
char str1[]="Do you know?",str2[]="Yes!";
strcat(str1,str2);
puts(str1);//输出字符数组str1中的字符串
printf("%s",str1);//使用%s格式输出字符数组str1中的字符串
}
程序运行结果:
2.通过字符指针指向字符串的方式引用字符串。
#include<stdio.h>
int main(){
char *str1="Do you know?",*str2;//str1为字符指针,不是字符数组
str2="Yes!";//字符型指针变量str2存放字符串的起始地址
printf("%s %s\n",str1,str2);//使用%s格式输出字符指针所指的字符串
puts(str1);
puts(str2);
}
程序运行结果:
三、字符型指针变量与字符数组的比较:
字符型指针变量可以指向单个字符,也可以指向字符串,还可以指向字符数组。正是由于字符型指针变量使用时非常灵活,因此,需要比较透彻地了解字符型指针变量的用法,才能避免一些很隐蔽的程序错误。
1.字符数组定义时,无论是否初始化,都将分配一块确定的存储空间用于存放数组内容。字符型指针变量则不然,如果字符型指针变量在说明时未初始化,则只在内存中为其分配一个存储单元,用于以后存放指针;如果初始化,则在内存的数据区中分配一块连续存储单元用于存放初始化字符型指针变量的字符串,并把该字符串的起始地址赋给字符型指针变量。切记,要存储字符串必须定义数组,而指针变量只能存储一个指针。
数组一经定义,使用的存储空间就不再变化,任何时刻都可用数组名访问数组元素。但字符型指针变量则不同,它的值一旦改变表示它的指向发生了改变,它就不再指向原来的内容。
2. 要改变字符数组的内容,可以使用函数 strcpy()、strcat()等,或者用指针法和下标法访问数组的元素,只要数组下标不越界就不会造成系统的致命错误。而要改变字符型指针变量的内容,只要给它赋值就行。但是,这样做很容易出错,需要特别小心。
四、总结:
利用指针的特点对字符串进行处理非常方便,只要使指针指向字符串的第一个字符,就可以引用字符串或对字符串中的字符进行处理。
最后,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。若这篇文章中有哪些不正确的内容,欢迎大家在评论区和我交流讨论!