笔记|C语言进阶——3.二维指针

C语言进阶——3.二维指针 1. 什么是二维指针

二维指针与一维指针一样都是保存地址的变量。
  • 示例1
#include int main(){ int n=0,m=0; printf("&n=%p\n",&n); printf("&m=%p\n",&m); int* p = NULL; int** pp = &p; scanf("%p",pp); scanf("%d",p); printf("n=%d\nm=%d\n",n,m); }

一维指针存放变量地址,二维指针存放一维指针地址。
  • 示例2
#include int main(){// 指针与数组之间关系 int arr[6] ={1,2,3,4,5,6}; int* p = arr; for(int i=0; i<6; ++i){ printf("%d\n",p[i]); }// 二维指针与指针数组之间关系 int arr2[6] ={7,8,9,10,11,12}; int* parr[] = {arr,arr2}; int** pp = parr; for(int i=0; i<2; ++i){ for(int j=0; j<6; ++j){ printf("%d ",pp[i][j]); } printf("\n"); } }

一维指针存放数组地址,二维指针存放指针数组地址。
2. 二维指针怎么用 1. 二维指针作为函数参数
  1. 传入一维指针地址
    传入一维指针地址可以取出函数内部申请的动态内存。
    可以取出单个变量
#include #include void Func(int** pp){ int* p = malloc(sizeof(int)); *p = 100; *pp = p; printf("&p=%p\tp=%p\t*p=%d\n",&p,p,*p); } int main(){ int* p = NULL; Func(&p); printf("&p=%p\tp=%p\t*p=%d\n",&p,p,*p); free(p); p = NULL; }

也可以取出一个数组
#include #include void PrintArray(int* arr,int n){ for(int i=0; i

  1. 传入指针数组地址
#include void PrintStrings(const char** strs,int n){ for(int i=0; i

2. 二维指针作为函数返回值 【笔记|C语言进阶——3.二维指针】二维指针通常用作指针数组的返回值类型。
  • 示例:创建m*n的单位矩阵
#include #include int** CreateIdentityMatrix(int r,int c){ int** pm = (int**)malloc(sizeof(int*)*r); for(int i=0; i

    推荐阅读