二位数组与指针

本文深入探讨了C语言中二维数组的使用与理解,详细解释了数组名、数组指针和一般指针的区别与联系,通过实例展示了如何利用指针遍历并操作二维数组。

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

#include <stdio.h>
#include <stdlib.h>
main()
{
/*
      二维数组的几个符号的测试
      1、a等同于&a[0]
      2、a[0]等同于&a[0][0]
      3、在数值上 a、&a、a[0]、&a[0]、&a[0][0] 是相等的,但是在类型上面是有区别的。
*/
	int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}};
	int (*p1)[5]; // 数组指针
	int *p2;      // 一般指针
	int i,j;
	p1 = a;       // 等同 p1 = &a[0];     // 指向二维数组的数组名
	p2 = a[0];    // 等同 p2 = &a[0][0];  // 指向二维数组的第一维数组
	printf("a        = %p.\n", a);        // a       类型是 int (*)[5]
	printf("&a       = %p.\n", &a);       // &a      类型是 int (*)[2][5]
	printf("a[0]     = %p.\n", a[0]);     // a[0]    类型是 int *
	printf("&a[0]    = %p.\n", &a[0]);    // &a[0]   类型是 int (*)[5]
	printf("a[0][0]  = %d.\n", a[0][0]);  // a[0][0] 类型是 int 
	printf("&a[0][0] = %p.\n", &a[0][0]); // &a[0][0]类型是 int *

	printf("a[0][2] = %d.\n", *(*(p1+0)+2));  // a[0][2] = 3
	printf("a[1][2] = %d.\n", *(*(p1+1)+2));  // a[1][2] = 8
    printf("a[0][2] = %d.\n", *(p2+2));       // a[0][2] = 3
	printf("a[0][4] = %d.\n", *(p2+4));       // a[0][4] = 5
	printf("a[1][4] = %d.\n", *(p2+9));
	/*利用一般指针*p2遍历数组输出*/
	for(i=0;i<2;i++)
	{
		for(j=0;j<5;j++)
		{
			printf("a[%d][%d] = %d\t",i,j,*p2++);
		}
		printf("\n");
	}	
	/*利用数组指针*p1遍历数组输出*/
	for(i=0;i<2;i++)
	{
		for(j=0;j<5;j++)
		{
			printf("a[%d][%d] = %d\t",i,j,*(*(p1+i)+j));
		}
		printf("\n");
	}
	system("pause");	//需包含这个头文件#include <stdlib.h>
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值