c语言中二级指针可以指向一个二维数组吗?要怎么指向呢?如果不能 用什么指向比较好
int arr[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
int **p = arr; // 二级指针指向二维数组
arr是二维数组的名称,本质上是该数组首元素的地址。p是指向arr的二级指针,存储的是arr行指针的地址。通过p可以访问二维数组的各个元素,例如:
printf("%d", *(*p + 1) + 2); // 打印 6
printf("%d", *p[1] + 3); // 打印 8
p[1]访问第2行指针,*p[1]对该行进行解引用访问第2行首元素,再加3访问第2行第4个元素。同样,如果不使用二级指针,我们也可以直接使用一级指针指向二维数组:
int (*p)[4] = arr; // 一级指针指向包含4个int的数组
p现在是指向包含4个int的数组的指针,可以理解为指向二维数组的一行。这两种方法都可以访问二维数组,选择使用哪种主要取决于具体需要。如果需要访问数组的各行,二级指针可能更方便些;如果操作主要集中在某一行,一级指针也可以满足需要。
总结来说,在C语言中,指向二维数组的方法主要有:
c语言中二级指针可以指向一个二维数组吗?
可以, 但是会变成一个四不像, 所以不要这么干.
*
如果不能 用什么指向比较好
指向数组的指针
int a[3][3] = {{1, 2}, {3, 4}};
int(*b)[3] = a;
不知道你这个问题是否已经解决, 如果还没有解决的话:可以使用二级指针来指向二维数组,具体实现方法如下:
#include <stdio.h>
int main(){
int array[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int **p = (int **)array; //使用二级指针指向二维数组
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
printf("%d ", p[i][j]);
}
printf("\n");
}
return 0;
}
上述方法中,需要将二维数组的地址转换为指向指针的指针,即二级指针。因为在C语言中,二维数组在内存中是按行存储的,因此可以通过二级指针实现行和列的访问。例如,p[i][j] 的访问方式就相当于 array[i][j]。
除了使用二级指针,也可以使用一维指针指向二维数组。将二维数组看成一维数组后,可以通过计算数组元素的下标来访问二维数组中的元素。具体实现方法如下:
#include <stdio.h>
int main(){
int array[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int *p = (int *)array;
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
printf("%d ", *(p+i*3+j));
}
printf("\n");
}
return 0;
}
上述方法中,通过将二维数组强制类型转换为一维指针,再通过计算数组元素位置的方法访问二维数组的元素。例如,p+i*3+j 就相当于 array[i][j] 所在的位置。
可以呀,一级指针是怎么指向一维数组的,二级指针就怎么指向二维数组
int a[10][10];
int **b=a;
就这么简单