C语言中的字符串数据在C中的存储方式

 更新时间:2022年07月13日 12:00:58   作者:小不点雨吖  
这篇文章主要介绍了C语言中的字符串数据在C中的存储方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

内存中的五大区域

栈:是专门用来存储局部变量的,所有的局部变量都是声明在栈区域中

堆:允许程序员手动的从堆申请指定字节数的空间来使用

BSS段:是用来存储未初始化的全局变量和静态变量,声明一个全局变量,如果我们没有初始化,在程序运行最开始的时候,这个全局变量是没有初始化的,存储在BSS段【程序运行后系统就自动的初始化为0,并把初始化后的全局变量存储在数据段中】

数据段/常量区:用来存储已经初始化的全局变量、静态变量和常量数据

代码段:用来存储程序的代码/指令

字符串数据在C语言中有两种存储方式

1.使用字符数组来存储:将字符串数据的每一个字符存储到字符数组中,并追加一个’\0’代表存储结束

char name[]=“jack”;

2.使用字符指针来存储字符串数据:直接将一个字符串数据初始化给一个字符指针

char* name =“jack”;

1)当它们都是局部变量的时候

字符数组是申请在栈区,字符串的每一个字符存储在这个字符数组的每一个元素中;

指针变量是声明在栈区的,字符串数据是以字符数组的形式存储在常量区的,指针变量中存储的是字符串在常量区的地址

2)当它们作为全局变量的时候

字符数组是存储在常量区的,字符串的每一个字符存储在这个字符数组的每一个元素中;

指针变量也是存储在常量区的,字符串数据是以字符数组的形式存储在常量区的,指针变量中存储的是字符串在常量区的地址

3)

以字符数组的形式存储字符串数据,不管是全局的还是局部的,都可以使用下标去修改字符数组中的每一个元素;

以字符指针的形式存储字符串数据,不管是全局的还是局部的,都不能通过指针去修改指向的字符串数据

当我们以字符指针的形式要将字符串数据存储到常量区的时候,并不是直接将字符串存储到常量区,而是先检查常量区中是否有相同内容的字符串,如果有直接将这个字符串的地址拿过来返回,如果没有,才会将这个字符串数据存储在常量区中

当我们重新为字符指针初始化一个字符串的时候,并不是修改原来的字符串,而是重新的创建了一个字符串,把这个新的字符串的地址赋值给它

几个比较容易混的点

1.这样是可以的,但是不是把“jack”改成了“rose”,而是重新创建了一个“rose”,把“rose”的地址赋值给name

char *name = "jack";name = "rose";

2.这样是不行的,name是数组名,代表数组的地址,不能为数组名赋值

char name[]="jack";name = "rose";

3.这样做是可以的,直接修改数组的元素

name[0]='r';name[1]='o';name[2]='s';name[3]='e';name[4]='\0';

统计字符串中某一个字符出现的次数

使用字符指针数组来存储多个字符串数据

这是一个一维数组,每一个元素的类型是char指针:

char* names[4] = {"jack","rose","lily","lilei"};

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

相关文章

  • C语言break和continue的语句用法

    C语言break和continue的语句用法

    这篇文章主要介绍了C语言break和continue的语句用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • C/C++代码操作MySQL数据库详细步骤

    C/C++代码操作MySQL数据库详细步骤

    这篇文章主要给大家介绍了关于C/C++代码操作MySQL数据库的相关资料,通过文中的这些示例,我们可以连接到MySQL数据库,并执行常见的数据库操作,如创建表、插入数据和查询数据,需要的朋友可以参考下
    2023-12-12
  • C语言运算符优先级列表(超详细)

    C语言运算符优先级列表(超详细)

    本篇文章是对C语言中运算符的优先级进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++实现LeetCode(92.倒置链表之二)

    C++实现LeetCode(92.倒置链表之二)

    这篇文章主要介绍了C++实现LeetCode(倒置链表之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 浅谈C++中const与constexpr的区别

    浅谈C++中const与constexpr的区别

    C++11中新增加了用于指示常量表达式的constexpr关键字。本文将带大家详细了解一下const与constexpr之间的区别,需要的小伙伴们可以参考一下
    2021-11-11
  • Qt使用流处理XML文件的示例代码

    Qt使用流处理XML文件的示例代码

    XML(eXtensible Markup Language)是一种通用的文本格式,被广泛运用于数据交换和数据存储。本文主要来和大家聊聊如何使用 Qt 处理 XML 格式的文档,需要的可以参考一下
    2023-02-02
  • C语言链表案例学习之通讯录的实现

    C语言链表案例学习之通讯录的实现

    为了将所学到的链表的知识进行巩固学习,做到学以致用,本文将利用链表制作一个简单的通讯录。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-10-10
  • C语言编程C++自定义个性化类型

    C语言编程C++自定义个性化类型

    这篇文章主要介绍了C语言编程中如何来自定义C++个性化类型,文中附含详细的示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-09-09
  • C++实现Huffman的编解码

    C++实现Huffman的编解码

    这篇文章主要为大家详细介绍了C++实现Huffman的编解码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 详解C++编程中的私有继承和公有继承

    详解C++编程中的私有继承和公有继承

    这篇文章主要介绍了详解C++编程中的私有继承和公有继承,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09

最新评论