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);
} 
这个结果正确,指针指向了数组中的字符串。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
