数组与指针与数组指针

一维数组名 -> 指针常量(指向第一个元素地址)

int ar_1d[COL] = {};

int* p = arr_1d

二维数组名 -> 数组指针常量(指向第一个行向量地址) 

int arr_2d[ROW][COL] = {};

 int (* qq) [COL] = arr_2d;

 int * q = arr_2d[0];

#include <stdio.h>
#include <stdlib.h>

#define ROW 2
#define COL 3 

int main(void)
{
	int arr_1d[COL] = {1, 2, 3};
	int arr_2d[ROW][COL] = {1, 2, 3, 4, 5, 6};
	// ------------print arr_1d----------------
	// method 1:数组索引遍历
	printf("arr_1d:\n");
	for(int i=0; i<COL; i++){
		printf("%p -> %d, ", &arr_1d[i], arr_1d[i]);
	}
	// method 2:根据数组名遍历地址遍历
	printf("\n");
	for(int i=0; i<COL; i++){
		printf("%p -> %d, ", arr_1d+i,*(arr_1d+i));
	}
	printf("\n");
	//method 3:指针遍历
	int* p = arr_1d;
	for(int i=0; i<COL; i++){
		printf("%p -> %d, ", p++, *p);		
	}
  

	// ------------print arr_2d----------------
	// method 1:索引遍历
	printf("\narr_2d:\n");
	for(int i=0; i<ROW; i++){
		for(int j=0; j<COL; j++){
			printf("%p -> %d, ",&arr_2d[i][j], arr_2d[i][j]);
		}
		printf("\n");
	}
	// method 2:地址遍历
	for(int i=0; i<ROW; i++){
		for(int j=0; j<COL; j++){
			printf("%p -> %d, ",*(arr_2d+i)+j,*(*(arr_2d+i)+j) );
		}
		printf("\n");
	}
	// method 3:指针遍历
	int *pp = arr_2d[0];
	for(int i=0; i<ROW; i++){
		for(int j=0; j<COL; j++){
			printf("%p -> %d, ", pp++, *pp);
		}
		printf("\n");
	}
    // method 4:数组指针遍历
	int (*q) [COL] = arr_2d;
	for(int i=0; i<ROW; i++, q++){
		for(int j=0; j<COL; j++){
			printf("%p -> %d, ", *q+j , *(*q+j) );
		}
		printf("\n");
	}
	exit(0);
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值