指针数组和数组指针的区别

指针数组和数组指针的区别

/*指针数组和数组指针的比较*/

#include <stdio.h>

int main(void) {
	
char b[4][5] = {						//char 是字符型变量,不能使用'10'
				{'a','b','c','d','i'},
				{'e','f','g','h','j'},
				{'1','2','3','4','k'},
				{'5','6','7','8','l'},
				};
/*  数组指针(把数组的地址给指针)的注意事项	*/
char (*p)[5] = b;				//数组指针:相当于二维数组
										// 若要用一维数组为其赋值,则一维数组需要加取地址符
										// 若要用二维数组为其赋值,则二维数组的列必须与数组指针的下标值相等
								//把二维数组的地址给指针p,使用(p[i]+j)调用数组b[i][j]的内容
						
*(p[0]+4) = 'm';				//可以当成二维数组改变数组中某个元素的值								
								
printf("%d",sizeof(p));			

printf("%c",*p[0]+10);			//输出结果 :k; 先求*p[0] == a, 再算a+10 == k

printf("%c",*(p[0]+4));		
printf("%c",*(p[1]+0));			//输出结果 :e;先求(p[0]+4), 再算*(p[0]+4);		


/*指针数组的注意事项*/	/*
char * a[4] = {"abcd","cdef","ghij","d"};	//指针数组:定义了1个数组,包含了4个元素,每个元素都是指针类型,并且指向字符串类型
													// 指针数组也可以看成是二维数组,但是每一行元素都是字符串
													// 可以使用二维数组的使用方法读取字符串中的字符
													
a[0][1] = 'f';										// error //不能使用二维数组的方式把元素中的某个字符串替换

printf("%s\n",a[0]);								// 直接将指针数组中的第0个元素(字符串"abcd")打印出来

printf("%c\n",a[0][0]);								// 将指针数组中的0个元素的第0个字符打印出来
printf("%c\n",a[3][0]);
*/
return 0;
}

/*
---------------------------------------------比较总结---------------------------------------------------
相同点 : 数组指针 和 指针数组 都可以看成二维数组

不同点 :
		1. 数组指针————————每一行都是 字符
		   指针数组————————每一行都是 字符串
		   
		2. 数组指针————————使用数组为 数组指针 赋值时,数组的列数必须与 数组指针 的列数一致,▲行数不限
		   指针数组————————使用循环可以为 指针数组 赋值,且字符串的 ▲长度不限
		    		
		3. 数组指针————————可以当成二维数组改变数组中某个元素的值
		   指针数组————————可以使用字符串单独为某个行元素赋值,不能为字符串中的某个元素赋值
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值