C语言指针学习——对使用字符指针变量和字符数组的讨论

虽然使用字符数组和字符指针变量都能实现字符串的存储和运算,但二者还是有区别的,不能混为一谈。

主要概括有以下几点:

1.字符数组由若干个元素构成,每个元素中存放一个字符,而指针变量存放的是字符串第一个字符的地址,而不是将字符串存放到指针变量中。

2.赋值方式。对字符数组只能对各个元素进行赋值,而不能采用一下办法进行赋值。

char str[20];

str ="hello world";

而对于字符指针变量,可以采用下面的方式

char *a;

a="hello world";

但是要注意赋值给a的不是字符,而是字符首元素的地址。

3.对字符指针变量赋初值:

char *a ="hello world";

等价于 

char *a;

a = "hello world";

而对于数组的初始化 :

char str[20] = {"hello world"};

不能等价于

char str[20];

str[] ="hello world";

4.如果定义了一个字符数组,在编译时为他分配内存单元,他有确定的地址。而定义一个字符指针变量时,

给指针变量分配内存单元,在其中可以放一个字符变量的地址,也就是说指针变量可以指向一个字符型数

数据,但如果未为他赋予一个地址值,则他并未具体指向一个确定的字符数据。

举例: str[10];

scanf("%s",str); 这是完全可以的 

虽然有人使用下面的方法,目的是想输入一个字符串,一般也能运行,但是这种方法是很危险的。

char *a;

scanf("%s",a);  // 如果指针变量没有赋初值,他是随机指向的

5.指针变量的值是可以改变的

char *a ="hello world";

a +=4;

printf("%s",a);

这时候指针变量a指向原来的地址+4 ,所以打印的结果就是o world



猜你喜欢

转载自blog.csdn.net/nienelong3319/article/details/79032965
今日推荐