指针与二维数组

本文详细探讨了一维和二维数组与指针之间的关系,通过具体的C语言代码示例,解释了数组名作为指针的特性及其应用,同时展示了如何利用指针进行数组的遍历。

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

我们都知道,当定义一个一维数组时候,一维数组的数组名相当于指向元素的指针变量,唯一的区别就是数组名不可重新赋值,而指针变量则可以。并且此地址即为数组首个元素的地址:

例子:

int main(int argc, const char * argv[]){
	int chars[3] ={7,12,9};
	int *p=chars;
	int i;
	for(i=0;i<3;i++){
	    printf("%p\n",p+i);
	}

 /*
0092F73C
0092F740
0092F744
*/
}


把上例子中的printf("%p\n",p+i); 更换成 printf("%d\n",p[i]); 打印结果:7,12,9跟数组下标访问元素很像

 

二维数组可以看作是元素是一维数组的一维数组,参考一维数组跟指针的关系,很容易得出二维数组名相当于是指向一维数组的指针变量,而二维数组的元素一维数组又是指向其内部元素的指针变量,故二维数组可以看做是二级指针变量。

二维数组跟指针怎么赋值那

int i,j;
	int chars[3][5] = {1,2,3,4,5,6};
	int (*p)[5] = chars;
	//int *p = chars; //错误 chars是相当于指向指向一维数组的指针,p是指向int类型的指针,故不能赋值
	for(i=0;i<3;i++){
		for(j=0;j<5;j++){
			printf("%p\n",p[i]+j); //遍历元素的地址 p[i]二维数组中各个一维数组的首个元素的地址 加+j就是一维数组中下一个元素地址
			printf("%p\n",*p+i*3+j); //遍历元素的地址 *p是二维数组首个元素的地址,即首个一维数组的地址,即一维数组的首个元素的地址+j,同上道理,+i*3是因为每个一维数组3个元素,换一行首个元素地址*p就+3的行数倍
			printf("%p\n",&p[i][j]); //类似数组操作   这三个打印的完全一样就是遍历每个元素的地址
		}
	}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值