二维数组和二级指针
展开全部
通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上。之后就可以通过二维指针直接访问了。
参考代码如下,可以看具体注释辅助理解。
#include <stdio.h>//输入输出头文件。#include <stdlib.h>//本程序需要用到malloc/free函数,引用该头文件。int main(){ int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; //定义二维数组a,并赋值从1-12. int ** p = NULL;//定义二维指针。 int i, j; p = (int **)malloc(sizeof(int *) *3);//要访问的数组有三行,所以申请三个一维指针变量。 for(i = 0; i < 3; i ++) { p[i] = a[i];//将二维数组行地址赋值到对应的一维指针上。 } for(i = 0; i < 3; i ++) { for(j = 0; j < 4; j ++) printf("%d ", p[i][j]); //用指针输出元素。p[i][j]这里也可以写作*(*(p+i) + j)。 printf("\n"); //每行输出后加一个换行 } free(p);//释放申请的内存。 return 0;}
参考代码如下,可以看具体注释辅助理解。
#include <stdio.h>//输入输出头文件。#include <stdlib.h>//本程序需要用到malloc/free函数,引用该头文件。int main(){ int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; //定义二维数组a,并赋值从1-12. int ** p = NULL;//定义二维指针。 int i, j; p = (int **)malloc(sizeof(int *) *3);//要访问的数组有三行,所以申请三个一维指针变量。 for(i = 0; i < 3; i ++) { p[i] = a[i];//将二维数组行地址赋值到对应的一维指针上。 } for(i = 0; i < 3; i ++) { for(j = 0; j < 4; j ++) printf("%d ", p[i][j]); //用指针输出元素。p[i][j]这里也可以写作*(*(p+i) + j)。 printf("\n"); //每行输出后加一个换行 } free(p);//释放申请的内存。 return 0;}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询