C语言中字符串数据在C中的存储方式是什么
这篇文章主要介绍“C语言中字符串数据在C中的存储方式是什么”,在日常操作中,相信很多人在C语言中字符串数据在C中的存储方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中字符串数据在C中的存储方式是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
内存中的五大区域
栈:是专门用来存储局部变量的,所有的局部变量都是声明在栈区域中
堆:允许程序员手动的从堆申请指定字节数的空间来使用
BSS段:是用来存储未初始化的全局变量和静态变量,声明一个全局变量,如果我们没有初始化,在程序运行最开始的时候,这个全局变量是没有初始化的,存储在BSS段【程序运行后系统就自动的初始化为0,并把初始化后的全局变量存储在数据段中】
数据段/常量区:用来存储已经初始化的全局变量、静态变量和常量数据
代码段:用来存储程序的代码/指令
字符串数据在C语言中有两种存储方式
使用字符数组来存储:将字符串数据的每一个字符存储到字符数组中,并追加一个’\0’代表存储结束
char name[]=“jack”;
使用字符指针来存储字符串数据:直接将一个字符串数据初始化给一个字符指针
char* name =“jack”;
1)当它们都是局部变量的时候
字符数组是申请在栈区,字符串的每一个字符存储在这个字符数组的每一个元素中;
指针变量是声明在栈区的,字符串数据是以字符数组的形式存储在常量区的,指针变量中存储的是字符串在常量区的地址
2)当它们作为全局变量的时候
字符数组是存储在常量区的,字符串的每一个字符存储在这个字符数组的每一个元素中;
指针变量也是存储在常量区的,字符串数据是以字符数组的形式存储在常量区的,指针变量中存储的是字符串在常量区的地址
3)
以字符数组的形式存储字符串数据,不管是全局的还是局部的,都可以使用下标去修改字符数组中的每一个元素;
以字符指针的形式存储字符串数据,不管是全局的还是局部的,都不能通过指针去修改指向的字符串数据
当我们以字符指针的形式要将字符串数据存储到常量区的时候,并不是直接将字符串存储到常量区,而是先检查常量区中是否有相同内容的字符串,如果有直接将这个字符串的地址拿过来返回,如果没有,才会将这个字符串数据存储在常量区中
当我们重新为字符指针初始化一个字符串的时候,并不是修改原来的字符串,而是重新的创建了一个字符串,把这个新的字符串的地址赋值给它
几个比较容易混的点
这样是可以的,但是不是把“jack”改成了“rose”,而是重新创建了一个“rose”,把“rose”的地址赋值给name
char *name = "jack";name = "rose";
这样是不行的,name是数组名,代表数组的地址,不能为数组名赋值
char name[]="jack";name = "rose";
这样做是可以的,直接修改数组的元素
name[0]='r';name[1]='o';name[2]='s';name[3]='e';name[4]='\0';
统计字符串中某一个字符出现的次数
使用字符指针数组来存储多个字符串数据
这是一个一维数组,每一个元素的类型是char指针:
char* names[4] = {"jack","rose","lily","lilei"};
到此,关于“C语言中字符串数据在C中的存储方式是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341