|
发表于 2020-8-29 17:37:26
|
显示全部楼层
首先,你的程序中k不是二维数组,k只是个指针数组,是一个指针的数组,存放的是三个指针,三个指针分别指向一维数组a的三个int类型的数据地址
然后,你所说的这两个东西根本就不是一回事儿,一个是二维数组,一个是一维指针数组,即使这些指针都指向一个一维数组,他们也不能称之为二维数组。
如下面程序,*k和k[0]都是数组二维数组a的首地址,但是k并不是,k是数组k的地址。实际上,int *k[]应该写成 (int*) k[],首先它是一个一维数组,然后该数组的元素都是指针,这是指针数组,这正是你弄错的地方#include<stdio.h>
int main(void){
int b[][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};
int a[][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};
int *k[] = {a[0],a[1],a[2]};
printf("b = %p\n", b);
printf("*b = %p\n", *b);
printf("b[0] = %p\n", b[0]);
printf("\n");
printf("k = %p\n", k);
printf("*k = %p\n", *k);
printf("k[0] = %p\n", k[0]);
printf("a[0] = %p\n", a[0]);
return 0;
}
最后,再跟你说说这个知识点正确的是什么。二维数组,和一维数组指针是一样的。划重点:是一维数组指针,不是一维指针数组。下面这个程序中才是数组指针,所谓数组指针,首先它是指针,然后他指向的是一维数组#include<stdio.h>
int main(void){
int b[][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};
int a[][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};
int (*k)[4] = a;
printf("b = %p\n", b);
printf("*b = %p\n", *b);
printf("b[0] = %p\n", b[0]);
printf("\n");
printf("k = %p\n", k);
printf("*k = %p\n", *k);
printf("k[0] = %p\n", k[0]);
printf("a[0] = %p\n", a[0]);
return 0;
}
关于数组指针,可以看看这个帖子 |
|