多维指针:(指向指针的指针)
在C语言中:
指针的本质是变量
指针会占用一定的内存空间
可以定义指针的指针来保存**指针变量的地址值
为什么需要指向指针的指针
- 指针变量也同样存在传值调用和传址调用
/*
测试代码
重置动态空间的大小
*/
#include <stdio.h>
#include <malloc.h>
int reset(char** p, int size, int new_size)
{
int ret = 1;
int i = 0;
int len = 0;
char* pt = NULL;
char* tmp = NULL;
char* pp = *p;
if((p != NULL) && (new_size > 0))
{
pt = (char*)malloc(new_size);
tmp = pt;
len = (size < new_size) ? size : new_size;
for(i = 0; i < len; i++)
{
*tmp++ = *pp++;
}
free(*p);
*p = pt;
}
else
{
ret = 0;
}
return ret;
}
int main()
{
char* p = (char*)malloc(5);
printf("%p\n", p);
if(reset(&p, 5, 3))
{
printf("%p\n", p);
}
free(p);
return 0;
}
二维数组
二维数组在内存中以一维的方式排布
二维数组中的第一维是一维数组
二维数组中的第二维才是具体的值
二维数组的数组名可看做为常量指针
数组名
一维数组名代表数组首元素的地址
二维数组名同样代表数组首元素的地址
int a[5] | a的类型为 int* |
---|---|
int a[2][5] | m 的类型为 int(*)[5] |
结论:
- 二维数组名可以看做事指向数组的常量指针
- 二维数组可以看做是一维数组
- 二维数组中的每个元素都是同类型的一维数组