字符串
1 字符串和字符的区别:
1.1 -字符放在单引号 ' '内,字符串放在 " " 双引号内;
-字串是有多个字符和空字符 '\0'作为结尾组成
-字符是基本类型,字符串是派生类型
2字符串
2.1 字符串字面量(字符串常量)
"I AM A String" //:双引号括起来的内容,称为字符串字面量(字符串常量)
字符串常量之间没有间隔,或者是用空白字符分隔,C将视为串联
char a[50]="Hello,and " "how are " "you " "today!" ; //等价于: char a[50]="Hello, and how are you today!" ;
如果想在字符串内使用 双引号 “ ”,需要使用反斜杠(\)
printf ("\" Run ,go \" exit "); //输出内容: //“ Run ,go " exit”
****字符串属于静态存储类别,使用双引号括起来的内容被视为指向该字符串存储位置的指针,字符串所指向地址存放的值是字符串的首字符。
*****字符串是以字符的形式存储,只不过以 \0 作为结束,这是字符串所指向地址存放的值是字符串的首字符的原因。
printf ("%s, %p c%\n","we","are",*"space"); //输出结果如下 // we, 0x100000f61 s
2.2 字符串数组以及初始化
2.2.1两种初始化方式
const char ml[40]=" limit "; const char ml[40]={'l','i','m','i','t','\0'};//'\0' 必不可少,缺少就是字符,而不是字符串
const char *pt= "limit";//指向字符串的指针
2.2.2:数组、指针和字符串
--数组名是数组首元素地址的别名,代表的是数组首元素的地址,是地址常量;
--字符串是存储在静态存储区;。
--数组要在内存中分配存储空间 ;
--指向字符串的指针是指向的字符串的首字符的地址,指针内存放的值是字符串的首字符;
***使用数组和指针初始化同样的一段字符串,数组的地址和指针的地址不同:因为指针指向的静态存储区的地址,而数组是内存中分配到空间的地址。
2.2.3 字符串的定义
如果是修改字符串,初始化的时候使用数组初始化,而非指针。通过修改指针指向地址的值来修改字符串内容,编译器一般是报错。
数组元素是可以修改的,因此,使用数组初始化字符串是可以修改的。
2.2.4 静态字符串数组的定义选择
char fruit1[3][10]={"apple","pears","oranges"};//二维数组 const char *fruit2[]={"apple","pears","oranges"};//指针数组
---上面两个初始化,fruit1是初始化了一个char类型的二维字符串数组,包含三个元素,每个一维数组长度是10,占用内存3*10=30个字节;需要内存为数组重新分配内存,是字符串的拷贝副本。
---fruit2是初始化了三个 char类型的指针,指向三个字符串,因此占用了3*8=24个字节,指针指向的是字符串字面量的静态存储地址。
****因此对于较长的静态字符串,使用字符串指针更加方便,高效。
2.2.5字符串的输出
#include <stdio.h> int main (void) { const char *mesg="you are very good"; const char *copy; mesg=copy; //指针赋值传递,传递的指向的地址 printf ("%s",copy); //字符串以%s为结尾 printf(“mesg=%s ;&mesg=&p; value=&p",mesg,&mesg,mesg); printf(“copy=%s ;©=&p; value=&p",copy,©,copy) }
//指针字符串的输出
#defien maxstring 20//指针数组最多有20个元素(字符串)
void string_()
{
char i =0;
char *pstring[maxstring]={
"HDMI1",
"HDMI2",
"HDMI3",
"Movie" //中间元素用逗号隔开,最后没有逗号
}; //分号结尾
//for(i=0;i<maxstring;)
printf("*pstring[1]=%s",*(&pstring[1])); //取指针指向地址内容,在指针符号 * 之前是一个地址常量,这样就能获得该地址内存储的值
}
//输出内容是pstring[1]=HDMI2
2.2.6字符串的更改
字符串更改适用于字符数组的定义,更改数组元素。
char string_1[]="helle you are special" "hello world"; //字符串定义中间不接逗号, //显示时自动连接 int main (void) { //更改字符串元素 string_2[4]='o'; //将数组第五个元素e更改为 o string_2[6]='\0'; //更改字符串长度 字符串以 \0 作为结尾 }