C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C语言用指针指向字符串

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);
} 

这个结果正确,指针指向了数组中的字符串。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文