一维数组名 -> 指针常量(指向第一个元素地址)
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);
}
文章评论