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

8 篇文章 0 订阅

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

主要概括有以下几点:

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值