C语言怎样用指针指向字符串

 更新时间:2023年10月12日 17:06:09   作者:耳朵用来听自己的心灵  
这篇文章主要介绍了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);
} 

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

总结

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

相关文章

  • C++实现学生考勤信息管理系统

    C++实现学生考勤信息管理系统

    这篇文章主要为大家详细介绍了C++实现学生考勤信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • C语言中strspn()函数和strcspn()函数的对比使用

    C语言中strspn()函数和strcspn()函数的对比使用

    这篇文章主要介绍了C语言中strspn()函数和strcspn()函数的对比使用,strspn是计算属于字符串的字符数而strcspn则是判断不属于,需要的朋友可以参考下
    2015-08-08
  • C++ 字符串string和整数int的互相转化操作

    C++ 字符串string和整数int的互相转化操作

    这篇文章主要介绍了C++ 字符串string和整数int的互相转化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C/C++实现快速排序算法的两种方式实例

    C/C++实现快速排序算法的两种方式实例

    快速排序是一种采用分治思想,在实践中通常运行较快一种排序算法,这篇文章主要给大家介绍了关于C/C++实现快速排序的两种方式的相关资料,文中给出了详细的示例代码,需要的朋友可以参考下
    2021-08-08
  • c++回调之利用函数指针示例

    c++回调之利用函数指针示例

    这篇文章主要介绍了c++利用函数指针示例,需要的朋友可以参考下
    2014-04-04
  • C语言各种操作符透彻理解下篇

    C语言各种操作符透彻理解下篇

    C 语言提供了丰富的操作符,除了上篇中的算术操作符,移位操作符,位操作符,赋值操作符外,还有单目操作符、关系操作符、逻辑操作符、条件操作符等等,让我们通读本篇来详细了解吧
    2022-02-02
  • 浅析C语言中堆和栈的区别

    浅析C语言中堆和栈的区别

    堆和栈都是一种数据项按序排列的数据结构。在C语言中是非常重要的知识点,接下来通过本文给大家介绍C语言中堆和栈的区别,感兴趣的朋友一起看下吧
    2016-06-06
  • 浅谈C++内存管理基础知识

    浅谈C++内存管理基础知识

    这篇文章主要为大家介绍了C++的内存管理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • c语言大小端(数据在内存中的存储)

    c语言大小端(数据在内存中的存储)

    大小端是内存存储字节的两种方式,一个是大端存储,一个是小端存储,本文主要介绍了c语言大小端,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • C++自带的sort函数如何对vector容器元素进行排序

    C++自带的sort函数如何对vector容器元素进行排序

    这篇文章主要介绍了C++自带的sort函数如何对vector容器元素进行排序问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论