1

C语言里字符串数组应该怎么定义?

字符指针

char *str[]="Hello World!";

char *str;
str = "Hello world"

理解:字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以 0 作为串的结束。

  • *a只是指向一个字符
int main(void){  
    char *a= "bcd" ;  
    printf("输出字符:%c \n", *a);  /*输出字符,使用"%c"*/
    printf("输出字符:%c \n", *(a+1) );  /*输出字符,使用"%c"*/
    printf("输出字符串:%s \n", a); /*输出字符串,使用"%s";而且a之前不能有星号"*"  */
    system("pause");  
}

运行结果:

输出字符:b 
输出字符:c 
输出字符串:bcd 
  • 若字符串常量出现在在表达式中,代表的值为该字符串常量的第一个字符的地址

字符数组

char  str[]="Iamhappy";

理解:字符数组是由若干个数组元素组成的,它可用来存放整个字符串。(即用字符数组来存放字符串)。

  • 这种字符数组只能在字符数组初始化时使用,字符数组的赋值只能对其元素一一赋值。
char str[10]={'I','','a','m','','h','a','p','p','y'};

错误的赋值方式:

char str[20];
str="Iamhappy";

总结

在C语言,有两种方式表示和存放一个字符串

  • 用字符数组存放一个字符串
char str[]="I love u";

数组名就是字符串的首地址

  • 用字符指针指向一个字符串
char *str="I love u";

指针变量就是字符串的首地址

两种表示方式的字符串输出都用:printf("%sn", str);
%s 表示输出一个字符串,给出字符指针变量名 str(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符数据,然后自动使 str 自动加 1,使之指向下一个字符...,如此,直到遇到字符串结束标识符 0 。

字符串指针数组

 char *str[] = {"Hello", "C++", "World"}; //char (*str)[] = ...
 int i;
 for(i=0; i<3; i++)
    printf("%s\n", str[i]);
  • char *str[]:表示str是数组,数组中的元素是指针,指向char类型
  • str+1:表示str的第二个元素的内存地址,所以是加8字节
  • *(str+1):表示数组的第二个元素的内容 (是个char类型的指针,表示C++字符串的地址)
  • *(*(str+1)+2):表示数组的第二个元素的内容(char指针),指向的第三个字符(C++中的第二个+)

已注销
35 声望8 粉丝