文档章节

字符指针,字符数组,双引号的字符串的区别与联系

J
 Jacob_zs
发布于 2015/06/13 10:16
字数 1077
阅读 198
收藏 5
点赞 0
评论 0

作者 :  陈宗权

       先说说双引号的字符串,比如"chenzongquan",它是由里面咱们看到的一系列字符以及一个尾随的'\0'字符组成,存储在内存的只读存储区中。只读存储区是在整个程序运行期间都保留着的、可见的,而且其中的数据原则上是保持不变的。所以对一个双引号表示的字符串,只要你知道它的具体地址,可以在程序的任何一个函数中再次使用。

 

    说到只读,要引一下,在16位系统中没有进行内存访问保护,所以在程序运行时实际上也可以改变只读存储区中的数据,但是在32位系统中有内存访问保护,程序运行时去改变只读存储区中的数据会引起异常。const的含义也是“只读”,不过这个只读只对编译器起作用,编译器可以在一定程度上通过语法检查避免对这种数据的修改操作。一旦程序运行起来,const是不起作用的。

 

    再说说字符数组。字符数组是一组用来存放字符的空间。它的空间是可读写的。如果是全局变量,它会在整个程序运行期间一直保留;如果是局部变量,就只在它的作用域内存在。它本意是用来放一组字符,跟字符串没有必然的关系,但是由于历史原因,它跟字符串纠缠不清了。

 

    说说历史吧。在C语言中,基本数据类型没有字符串类型(其实C++/Java/C#的基本数据类型中也同样没有字符串,只不过它们都提供一个封装好的用于处理字符串的类型),但是程序中又经常要处理字符串,所以只好用字符数组来保存字符串了。字符数组作为数组要求有固定的长度,但是字符串长度又不一定,所以采取了用一个措施,就是在字符数组中用'\0'来表示字符串到此结束,同在这个字符数组中但是在'\0'后面的字符就不算是这个字符串的了。为了方便使用字符串,只要指定这个字符串的第一个字符的地址,通过它找到第一个字符,然后依次往后找就能找到第二个、第三个字符,以此类推,直到找到'\0'为止,也就走遍了整个字符串了,因此C语法中规定通过第一个字符的地址来引用字符串。在数组中,数组名就表示数组中第一个元素的地址,相应的,在字符数组中,数组名就表示数组中第一个字符的地址,因此也就经常用字符数组名来引用其中的字符串。

 

    字符数组中保存的只是一组字符,只有其中有'\0'字符时才可以把这个字符数组当成字符串,所以字符数组未必都是字符串。

 

    字符指针则是一个空间,用来保存地址,一个字符在内存中的地址,不保存字符。它本来跟字符串也没有什么牵扯,因为它保存的内容中根本连一个字符都没有,只是别处的某个字符的地址而已。但是同样由于上面说到的历史原因,C语言中通过一个字符地址来引用字符串,所以往往通过字符指针来引用保存在内存中另一个地方的字符串。字符指针独立存在是没有意义的,既然是保存另一个地方的一个字符的地址的,必须真的在另一个地方有一个字符,而且把它的地址保存到这个字符指针中之后,这个字符指针才开始有意义,才能用这个字符指针去引用另一个字符或者以那个字符为首的字符串。

本文转载自:http://blog.renren.com/share/226124099/11850349578

共有 人打赏支持
J
粉丝 1
博文 7
码字总数 1407
作品 0
中山
C语言中的字符串

1.字符串与字符数组 字符数组是一种数组,这中数组中的每个元素是一个字符型数据。 定义一个字符数组: 对已定义的字符数组进行赋值: 以上字符素组的存储为: 字符数组的初始化有两种方式:...

大道无名
2016/10/22
10
0
C语言字符串总领

字符串(character string)是一个或多个字符的序列。 双引号不是字符串的一部分。双引号告知编译器它括起来的是字符串。C语言没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数...

狐狈筱筱生
2017/12/04
0
0
C Primer Plus 第11章 字符串和字符串函数 11.1字符串表示和字符串I/O

当然,最基本的您已经知道了:字符串(character string)是以空字符(o)结尾的char数组。因此,您所学的数组和指针就可以用在字符串上。但是由于字符串的使用非常广泛,C提供了很多专为字符...

idreamo
2016/08/17
22
0
C Primer Plus 第11章 字符串和字符串函数 11.3 字符串输出

11.3.1 puts( )函数 puts( )函数的使用很简单,只需要给出字符串参数的地址。程序清单11.8列出了输出字符串的多种方式。 程序清单11.8 put_out.c程序 输出如下: 注意,每个字符串都单行显示...

idreamo
2016/08/19
11
0
Shell脚本入门-2

(一)定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="runoob.com" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名...

Avner
03/06
7
0
小蚂蚁学习C语言(33)——C语言字符串

字符串常量 字符串常量是由双引号括起来的一串字符,如“ABC”。在存储字符串时,系统会自动在其尾部加上一个空值“0”,空值也要占用一个字节,也就是字符串“ABC"需要占用四个字节。但不计入...

嗜学如命的小蚂蚁
2016/01/13
57
0
Shell注释+字符串+数组

Shell注释 sh里没有多行注释,只能每一行加一个#号。 如果遇到大段的代码需要注释,可以把这一段用花括号扩起来,定义成一个函数,没地方调用这个函数,这块代码就不会执行。 Shell字符串 字...

Tanswer_
2016/06/07
0
0
Delphi、PChar和Char数组的比较

Delphi、PChar和Char数组的比较   string和Char数组都是一块内存, 其中存放连续的字符. string保存具体字符的内存对用户是透明的, 由Delphi管理它的分配, 复制和释放, 用户不能干预(其实也...

技术小甜
2017/11/08
0
0
shell脚本从入门到复杂二(变量)

定义变量时,变量名不加美元符号,如: # myname=sxzhou 注意: 变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则: 命名只能使用英文...

断臂人
05/04
0
0
array,string,Math,date对象

数组(array) 数组的定义形式: var arr1 = new array(1,3,25,56); //定义了一个数组,其中有6 个数据 var arr2 = new array(); //只是单纯的定义了一个数组,即空数组 var arr3 = [1,3,,5...

简_笑
2017/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

10.28 rsync工具介绍 , rsync常用选项, rsync通过ssh同步

rsync远程同步 重点!重点!!重点!!! 例子 • rsync -av /etc/passwd /tmp/1.txt • rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt rsync格式 • rsync [OPTION] … SRC DEST • rs......

Linux_老吴
13分钟前
0
0
iis php 环境搭建,非常详细的教程

准备篇 一、环境说明: 操作系统:Windows Server 2016 PHP版本:php 7.1.0 MySQL版本:MySQL 5.7.17.0 二、相关软件下载: 1、PHP下载地址: http://windows.php.net/downloads/releases/ph...

T_star
15分钟前
0
0
Day35 rsync通过服务同步

rsync通过服务同步 rsyncd.conf配置文件详解 port:指定在哪个端口启动rsyncd服务,默认是873端口。 log file:指定日志文件。 pid file:指定pid文件,这个文件的作用涉及服务的启动、停止等...

杉下
21分钟前
0
0
【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库

编译 Luajit 库,的确是一个挑战。因为官网的教程,在当前版本的 Xcode 和 NDK 环境中,已经不适用了。以前只是编译了适用于真机的 Luajit 库。最近在尝试编译模拟器 Luajit 库,就顺便梳理了...

ios122
21分钟前
0
0
rsync至ssh同步

rsync: 文件同步工具,可实现“增量拷贝”;使用yum安装rsync包 常用选项:-a=-rtplgoD (-r同步目录,-t保持文件的时间属性,-p保持文件的权限属性,-l保持软连接,-g保持文件的属组,-o保持...

ZHENG-JY
27分钟前
0
0
TradingView 学习笔记

#前言 公司最后需要使用TradingView展示K线图走势。由于之前没接触过,拿到文档时一脸蒙逼。还好找到二篇文章+Demo代码,直接改改就行了。 #被批 由于上面的懵懂,有个问题困扰4个小时没解决...

hihubs
27分钟前
0
0
10.28 rsync工具介绍~10.31 rsync通过ssh同步

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而...

洗香香
29分钟前
1
0
php如何使用JSON-RPC查找以太坊中的最新块哈希hash值?

我用PHP中开发了一个以太坊块资源管理器,并成功地与我的服务器Geth节点建立了JSON-RPC通信。然而,当我试图找出最后一个区块时,我陷入了困境。我在https://ethereum.gitbooks.io/frontier...

智能合约
35分钟前
1
0
卷积为什么要旋转180度

参考《最容易理解的对卷积(convolution)的解释》 https://blog.csdn.net/bitcarmanlee/article/details/54729807 这篇博客详细讲解了“卷积”,提及了为什么要反转180度,我简述下。 1.卷积的...

datadev_sh
38分钟前
0
0
【2018.07.18学习笔记】【linux高级知识 20.23-20.26】

20.23/20.24/20.25 告警系统邮件引擎 告警系统邮件引擎由两个文件组成,放在/mon/mail/目录下:mail.py、mail.sh mail.py:是邮件的核心python脚本,邮件功能的实现mail.sh:是告警邮件系统...

lgsxp
43分钟前
16
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部