小兔网

一、字符指针、字符数组

字符指针

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

char *ps="C Language";

顺序是:1.分配内存给字符指针;2.分配内存给字符串;3.将字符串首地址赋值给字符指针;

char *ps;  // ps 字符串指针,是指针,是一个变量

ps="C Language"; // ps 为字符串的首地址,利用 ps++ 可遍历字符串,字符串存储在以 ps 为开始地址的地段连续的内存空间中,并以 \0 作为字符串的结束。

这里有两点需要考虑清楚的地方:

1、*a 只是指向一个字符。

举例如下:

实例

#include <stdio.h>#include <stdlib.h> 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 

2、若字符串常量出现在在表达式中,代表的值为该字符串常量的第一个字符的地址。所以 hello 仅仅代表的是其地址。原声明方式相当于以下声明方式:

char *a;  a="hello"; /*这里字符串"hello"仅仅代表其第一个字符的地址*/

字符数组

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

在 C 语言中,将字符串作为字符数组来处理。(C++中不是)

字符数组初始化的方法:

1). 可以用字符串常量来初始化字符数组:

char  str[]={"Iamhappy"};

可以省略花括号

char  str[]="Iamhappy";  # 系统自动加入 \0 

注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值。

下面的赋值方法是错误的:

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

对字符数组的各元素逐个赋值。

char str[10]={'I','','a','m','','h','a','p','p','y'};

在 C 语言中,可以用两种方法表示和存放字符串:

(1)用字符数组存放一个字符串

char str[]="IloveChina";

(2)用字符指针指向一个字符串

char *str="IloveChina";

两种表示方式的字符串输出都用:printf("%s\n", str);

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

二、字符串指针

string* str 可以赋值:

string* str = {"hello", "world"}; //  对比与 char *name = "wang" = {'w','a','n','g'}//  *(str) = "hello", *(str+1) = "world"//  *(*(str)+1) = 'e'

也就是说每个元素都是 string 类型的,跟 char* 是不一样的,不过 string* 可以用 char** 来代替:

string = char*, string* = char**

三、(字符串)指针数组

实例

#include <stdio.h>void main(){ char *str[] = {"Hello", "C++", "World"}; //char (*str)[] = ... int i; for(i=0; i<3; i++) printf("%s\n", str[i]);} // str[0]字符串"hello"的首地址,str[0]+1:字符串"hello"第二个字符'e'的地址,str[2]=str+2:第三个字符串"world"的首地址// str[1]字符串"C++"的首地址// str[2]字符串"world"的首地址

实例

#include <stdio.h>#include <string.h>int main(){ char *str[] = {"Hello", "C++", "World"}; char **p; for(p=str; p<str+3; p++) puts(*p); #*p为字符串首地址,*p[0]为字符串的第一个字符地址}