字符串

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  ;&copy=&p; value=&p",copy,&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 作为结尾
}

 

 

 

 

 

 

 

 

 

 

 

       

posted @ 2020-08-14 23:55  爬上那个坡  阅读(175)  评论(0编辑  收藏  举报