字符指针变量和字符数组的讨论

本文详细阐述了字符数组与字符指针变量的区别,包括它们的内容、赋值方式、初始化方法、地址分配特点及指针变量值的变化特性,并通过实例进行说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
*	经常会弄错字符指针变量和字符数组的使用方式 
*	写在这里方便查阅 :
* 
*	(1)内容不同:
*		字符数组由若干个元素组成,每个元素放一个字符。
*		而字符指针变量中存放的是地址(字符串第一个字符的地址),决不是将字符串放到字符指针变量中。
* 
* 	(2)赋值方式: 
* 		对字符数组只能对各个元素赋值,不能用以下方法: 
* 			char str[14]; 
* 			str="I love China!";//************错误的赋值方式!**************
* 		而对字符指针变量,可以用以下方法: 
* 			char *a; 
* 			a="I love China!";//***赋给a的不是字符,是字符串的第一个元素***
* 
* 	(3) 初始化: 
* 		对数组的初始化:--数组可以在定义时整体赋初值,但不能在赋值语句中整体赋值 
*			char str[14]={"I love China!"}; 
*			不等价于
*			char str[14];
*			str[]="I love China!";
*		对字符指针变量赋初值:
*			char *a="I love China!";
*			等价于	
*			char *a;
*			a="I love China!"; 
*
*	(4) 地址分配: 
*		如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址 。 
* 
*		而定义一个字符指针变量时 ,给指针变量分配内存单元,在其中可以放一个 
*	字符变量的地址, 但如果未对它赋予一个地址值,则它并未具体指向一个确定的 
*	字符数据。
*		例如: 
* 			char str[10];
* 			scanf("%s",str);//正确 
* 
*			char *a;
*			scanf("%s",a);//错误!!!a的地址是不可预料的
*		改正: 
*			char *a,str[10];
* 			a=str;
* 			scanf("%s",a);
*			先使a有确定的值,也就是使a指向一个数组的首元素,然后输入一个字符串, 
*		把它存放在以该地址开始的若干单元中。 
*	
*	(5)指针变量的值是可以改变的 
*		指针变量的值可以改变 
*			char *a="I love China!";
*			a=a+7;
*			printf("%s",a);//输出:China! 	
*	
*		数组名虽然代表地址,但它是常量,它的值是不能改变的 
*			char str[]={"I love China!"}; 
*			str=str+7;//[Error]incompatible types in assignment of 'char*'to 'char[14]'
*			printf("%s",str);
*/
	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值