C语言怎样用指针指向字符串
作者:耳朵用来听自己的心灵
这篇文章主要介绍了C语言怎样用指针指向字符串问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
字符串的定义和使用
part 1 指针定义字符串
指针定义字符串,输出它的地址:
#include<stdio.h> int main() { char *s1="Hello World"; char *s2="Hello World"; printf("0x%p\n",s1); printf("0x%p\n",s2); }
这时,出现地址相同的情况,说明这里的“Hello World”只是存储在一个临时的地方,两个指针同时指向了这个“Hello World”,这时字符串不可写。
什么叫不可写?看下面。
part 2 数组定义字符串
#include<stdio.h> int main() { char s3[]="Hello World"; char* s; s=s3; printf("s3:0x%p\n",s3); printf("s:0x%p\n",s); s3[0]='B'; printf("%c\n",s3[0]); printf("%s\n",s3); printf("%s\n",s); printf("%d\n",sizeof(s3)); }
用数组定义字符串,字符串可写,这时s3[0]=‘B’,结果可以改变就叫做字符串可写。part1里的字符串不能改变,s3[0]='B’语句没有作用。
这里用数组定义字符串后,再用指针指向这个字符串,和part1相比,地址复杂了许多,说明这个地址不是临时地址了。
计算字符串长度12,Hello World+\0,\0也占有字符串的一位,但是不会显示出来。
part 3 指针指向字符串
下面给出指针指向字符串的两种方式:
\0才代表一个字符串的结束,\0才代表一个字符串的结束,\0才代表一个字符串的结束。它是数组的一部分。
#include<stdio.h> int main() { char b[]={'t','i','t','t','l','e','\0'}; char* a; a=b; printf("%s\n",a); } //或 #include<stdio.h> int main() { char b[]="tittle";//这和上面char b[]={'t','i','t','t','l','e','\0'};是相等的。 char* a; a=b; printf("%s\n",a); }
当你不需要对字符串改变时,临时用指针定义也可以的:
#include<stdio.h> int main() { char *b="tittle"; char *a; a=b; printf("%s\n",a); }
下面上一个带有思考性的问题,下面的指针事实上是直接指向一个数组元素‘s’的,数组最后没有‘\0’。
当你硬要以字符串形式输出时:
#include<stdio.h> int main() { char n[1]={'s'}; char* a; a=n; printf("%c\n",a[0]) printf("%s\n",a); }
结果出错。
修正:
#include<stdio.h> int main() { char n[]={'s','\0'}; char* a; a=n; printf("%c\n",a[0]) printf("%s\n",a); }
这个结果正确,指针指向了数组中的字符串。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。