字符串是以空字符(\0)结尾的char类型数组

puts() 函数 也属于stdio.h 系列的输入 / 输出函数       puts() 函数只显示字符串,而且自动在显示的字符串末尾加上换行符

从 ANSI C 标准起,如果字符串字面量之间没有空隔,或者用空白字符分隔,C会将其视为串联起来的字符串字面量。

字符串属于静态存储类别

用双引号括起来的内容被视为指向该字符串位置的指针

*"space far"表示该字符串所指向地址上储存的值,应该是字符串"space far"的首字符

 

数组形式(ar1[])的字符串

通常,字符串都作为可执行文件的一部分储存在数据段中。当把程序载入内存时,也载入了程序中的字符串

字符串储存在静态存储区,程序在开始运行时才会为数组分配内存,此时,才将字符串拷贝到数组中,注意此时的字符串有两个副本,一个是在静态内存中的字符串字面量,另一个是储存在数字组中的字符串。

在数组形式中,ar1是地址常量,不能更改ar1,如果改变了ar1,则意味着改变了数组的存储位置(即地址)可以进行类似arl+1这样的操作,标识数组的下一个元素。但是不允许 ++arr1这样的操作。递增运算符只能用于变量名前(或概括地说,只能用于可修改的左值),不能用于常量,数组的元素是变量,数组名不是变量。

指针形式(*pt1)的字符串

一旦开始执行程序,它会为指针变量pt1留出一个储存位置,并把字符串的地址储存在指针变量中。该变量最初指向该字符串的首字符。

字符串字面量被视为const 数据。不能用pt1改变它指向的数据

如果一个字符串字面量拷贝给一个数组,就可以随意改变数据,除非把数组声明为const(建议在把指针初始化为字符串字面量时使用 const限定符 )

总之,初始化数组把静态存储区的字符串拷贝给数组中,而初始化指针只把字符串的地址拷贝给指针。

只有用指针表示法可以进行递增操作。

 

指针与字符串

 

指针mesg和copy分别储存在000000000062FE48和000000000062FE40的内存中

指针的值就是它储存的地址,mesg和copy的值相等,说明他们都指向同一个位置,程序并未拷贝字符串