四、字符串指针
1、字符串指针
在C语言中,可以用两种方法访问一个字符串
1>字符数组
char str[]="I Love China";
printf("%s\n",str);
说明:和前面介绍的数组属性一样,str是数组名,它代表字符数组的首地址。
2>字符串指针指向字符串
char *变量名="字符串内容";//“字符串内容”是常量
char *str="abc"; //定义并且初始化字符串指针
char ch='b'; //定义并且初始化字符变量
char *p=&ch; //定义并且初始化字符指针
字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。
注意!
1、使用字符数组来保存的字符串是 保存栈里的, 保存栈里面东西是 可读可写,所以我们可以改变里面的字符当把一个字符串常量赋值一个字符数组的时候,那么它会把字符串常量中的没有字符都放到字符数组里面
2、使用字符指针来保存字符串,它保存的是字符串常量地址,常量区是 只读的,所以我们不可能修改字符串的字符
总结:
char *p 只是定义了一个指针变量p并没有给它初始化,那么这个p是一个野指针,它并没有指向某一块内存空间,所以不允许访问野指针,如果给p分配内存空间就可以被使用了
scanf("%s",p);
2、二维字符数组概念
1>二维字符数组
例如:
char st[3][6]={"china","japan","korea"};
或者
char st[ ][ 6]={"china","japan","korea"};
用二维数组来保存多个字符串:
>用二维的字符数组可以存储多个字符串
>第一维存的是每个字符串的首地址
>每个字符串的长度,不能超过第二维长度
2>一维字符数组
char ch[10]={'a','b'}; 或 char ch1[ ]="abc";
3>char型指针数组和字符数组区别
1>char 类型的指针数组
定义了一个指针数组name,并对name作了初始化赋值。其每个元素都指向一个字符串。
比如: char *name[3]={"adf","dfg","dfgh"};
2>字符串指针变量与字符数组的区别
用字符数组 和 字符串指针变量 都可实现字符串的存储和运算。但是两者是有区别的。在使用时应该注意一下几个问题:
a:字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以'\0'作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
b:对字符串指针方式
char *p="I Love You";
可以写成:
char *p;
p="I Love You";
而对数组方式:
char st[]={"I Love You"};
不能写成:
char st[];
st={"I Love You"};
而只能对字符数组的各元素逐个赋值!!!
总结:
当一个指针变量在未取得确定地址前使用时危险的,容易引起错误。这是个野指针
但是对指针变量直接赋值是可以的。因为C系统对峙着变量赋值是要给以确定的地址。
总结2:
字符串指针: char *s="abc";
指向可以改变 ,s是一个指针变量
s="helloworld";
字符数组 :
char s1[]="abc";
s1是数组名,是一个常量
|
|