指针与字符串

数组和指针具有相似性,以字符数组形式表示的字符串,也可以借由指针来获得更灵活的多样的处理。

数组和指针的相同点
#include <stdio.h>
int main()
{
	int i;
	char str[]="abc";//用数组实现的字符串 
	char stc[]="a,b,c";
/*字符串数组中,“”里面所有的元素都会占用一空间,
包括‘,’ 所以stc[]的表达方式是不对的 */
	char *ptr="123";//用指针实现的字符串
	for(i=0;str[i];i++)
		putchar(str[i]);
	putchar('\n'); 
	
	for(i=0;ptr[i];i++)
		putchar(ptr[i]);
	putchar('\n'); 
	printf("str=%s\n",str);
	printf("ptr=%s\n",ptr);
	//%s输出一串字符串,直到某一个字节内存的元素为'\0' 。 
	return 0;
} 

输出结果:
在这里插入图片描述
不带下标运算符[ ]单独出现的数组名,就是指向该数组第一个元素的指针,所以str就是指向第一个字符’a’的指针。原本就是指针的ptr则指向字符串"123"的第一个字符’1’。
传入printf函数的str和ptr,一个是数组,一个是指针。这两者有着本质的区别,但他们都指向字符串的第一个字符,这一点是相同的。

数组和指针的不同点
#include <stdio.h>
int main()
{
	int i;
	char str[]="abc";//用数组实现的字符串 
	char stc[]="a,b,c";
/*字符串数组中,“”里面所有的元素都会占用一空间,
包括‘,’ 所以stc[]的表达方式是不对的 */
	char *ptr="123";//用指针实现的字符串
	
	str="def";//错误,不能这样赋值
	ptr="456";//正确,指向另一个字符串字面量
	
	printf("str=%s\n",str);
	printf("ptr=%s\n",ptr);
	//%s输出一串字符串,直到某一个字节内存的元素为'\0' 。 
	return 0;
} 

对于用数组实现的str,不能在赋值为其他字符串,就像str是一个家族的族长,不能选择外族人来继承家产。
不过对于指针是可以重新赋值的,ptr原来喜欢"123";后来移情别恋喜欢"456";
这不是复制整个字符串的内容,只是重新指向了另一个字符串(的第一个字符)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值