指向指针的指针的内存分配方法
指针的指针变量
一个指针变量可以保存另一个指针变量的地址。可以声明如下:
type * *变量;
分配内存
分配给指向指针的指针变量的内存可以看作是一个二维结构。它有相关的行和列。例如,大小为m*n的存储器被认为有M行,每行有这N列。所以分配内存的时候:
1。首先为M行分配内存
2。为每行分配N列内存
示例:为一个指向浮点数的指针分配内存,假设有4行3列
float * * float _ values;
//将变量赋给行
float _ values =(float * *)malloc(4 * sizeof(float *));
//是for(int i =0的每行的列非伴随内存
;I {
*(float _ values+I)=(float *)malloc(3 * sizeof(float));
}
赋值
访问二维内存地址有两种方式:
1。使用[]运算符,类似于访问二维数组:
for(int I = 0;I < 4;i++)
for(int j = 0;j {
scanf(\"%f\ ",& val);
float _ values[I][j]= val;
}
2。(int I = 0;的指针运算符(*)
;I < 4;i++)
for(int j = 0;j {
scanf(\"%f\ ",& val);
*(* float _ values+I)+j)= val;
}
释放内存
对于动态分配的内存,我们需要释放它。释放要从底层开始,和分配正好相反。如果我们先释放高级指针,那么我们就会丢失低级指针,这样我们就无法释放那些指针所指向的内存,从而导致内存泄漏。释放内存的正确方法如下:
/释放分配给二级指针
for(int I = 0;I {
free(float _ values[I]);
}
//释放分配给第一级指针的内存
free(float _ values);
0条评论