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. 二维指针作为函数参数
- 传入一维指针地址
传入一维指针地址可以取出函数内部申请的动态内存。
可以取出单个变量
#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
- 传入指针数组地址
#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
推荐阅读
- C语言进阶|【C语言进阶7——数组和指针的练习(1) - 学习sizeof 和 strlen,看完这一篇就够了】
- c|指针进阶——字符指针、指针数组和数组指针如何辨别和判断
- C语言进阶|【C语言进阶6——指针的进阶(3)-总结数组和指针】
- AppInventor2笔记
- 笔记|python Matplotlib 绘制多个子图
- 笔记|python 函数的概述与基本用法总结
- 笔记|基于python爬取数据以及可视化
- 笔记|python Bug的常见类型 总结
- 笔记|python matplotlib条形图