C语言(数组和指针存储字符串)
创作内容不易,学习的朋友麻烦下博主,后面学习不迷路。有不会的问题也可以论坛咨询博主,博主也会及时sigusoft~~ 目录 一.数组和指针 1.字符串数组和字符数组区别 2.数组存储字符串常量 3.指针存储字符串 二.数组和指针的区别 1.常量和变量 2.修改成本 3.存储成本 一.数组和指针 1.字符串数组和字符数组区别 char ch[]=”hello world”,末尾存储着0,就是字符串,相当于Char ch[]={‘h’,’e’,’l’,’l’,’o’,’ ‘,’w’,’o’,’r’,’l’,’d’,’0′} Char ch[]={‘h’,’e’,’l’,’l’,’o’,’ ‘,’w’,’o’,’r’,’l’,’d’},字符数组(末尾并没有存储0) 这里的0属于char形式的空字符,不是数字字符0 字符数组因为没有’0’,所以系统在打印的时候是无法检测到结束的,啥时候能结束全靠啥时候能遇到一个’0’;
演示代码: 这里可以看出来字符数组打印中会出现一段乱码部分。该演示代码,具体效果不固定,但基本原理一致。 2.数组存储字符串常量 数组形式,Char ch[]=”hello world”,ch在计算机的内存中分别为了一个内含12个素的数组(每个素对应一个字符,还加上一个末尾的空字符‘0’),每个素被初始化为字符串字面量对应的字符。 通常,字符串都作为可执行文件的一部分存储在数据段中。当把程序载入内存时,也载入了程序中的字符串。 字符串存储在静态存储区中,但是,程序在开始运行时才会为该数组分配内存,然后猜把字符串拷贝到数组中。注意此时字符串有两个副本。一个时在静态内存中的字符串字面量,另一个时存储在ch数组中的字符串。
演示代码: 明示常量CHAR,“hello world”和字符串数组的内容都是一样,但首素地址是完全不同的,这也说明了ch存储的是”hello world”的副本。 3.指针存储字符串 指针形式,Char * ch = “hello world”也时得编译器为字符串在静态存储区预留12个素得数组。另外,一旦开始执行程序,它会为指针变量ch留出一个存储位置,并把字符串得地址存储在指针变量中。该变量最初指向该字符串得首字符。
演示代码: 明示常量CHAR,“hello world”和指针P的内容都是一样,同时三者的首素地址也都是相同的。 二.数组和指针的区别 1.常量和变量 Char ch1[]=”hello world” Char * ch2 = “hello world” 首先我们要理清一个逻辑,数组名就是首素的地址,这就意味着数组名是一个常量,如果我们对这个常量进行的更改,那么我们将无法在访问到这个字符串副本了。而指针属于变量,对于对于变量,指针所指向的地址是可以改变的
演示代码: 这里其实我想演示下,但编译器已经报警,不让这样操作。 2.修改成本 因为指针指向字符串存储位置,所以该变一处就会直接影响字符串内容,所以一般推荐用 const Char * ch2 = “hello world” 保证字符串内容不会被改变 但数组因为存储的字符串副本,所以可以随意更改
这里其实我想修改指针,但编译器已经报警,不让这样操作。
所以这里我演示修改了数组ch,可以发现程序没有报警。 3.存储成本 因为数组存储的是副本,这就意味着它所需要的存储空间是个完整的字符串大小。但指针因为只存储字符串的首素地址,所以它一般只占用8个字节(或4个字节)
演示代码: 所以根据上面三个区别,如果想要修改字符串内容,用数组。如果想要降低存储大小,就用指针 好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~ 如果朋友你感觉文章的内容对你有帮助,可以点赞,文章和专栏以及我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/28512.html