指向指针指针变量 个指向指针指针变量能够保存另个指针变量地址可以用如下声明:
type **variable ;
分配内存
可以把分配给指向指针指针变量内存视为 2维结构它有这相关行和列例如对和大小为m*n内存视为有m行而每行又有这n列因此分配内存时:
1.首先为m行分配内存
2.对每行再分配n列内存
例子:为个指向浮点数指针指针分配内存假设有4行3列
float **float_values;
//为行分配变量
float_values=(float **)malloc(4*(float *));
//为每行列非陪内存
for( i =0 ;i<4 ;i)
{
*(float_values+i)=(float*)malloc(3*(float));
}
赋值
有两种思路方法访问 2维内存地址:
1.用操作符类似和访问 2维:
for( i=0; i< 4 ;i)
for( j=0 ;j<3 ;j)
{
scanf(\"%f\",&val);
float_values[i][j]=val;
}
2.指针操作符(*)
for( i=0; i< 4 ;i)
for( j=0 ;j<3 ;j)
{
scanf(\"%f\",&val);
*((*float_values+i)+j)=val;
}
释放内存
对于动态分配内存我们需要将其释放释放要从最底层开始和分配是顺序刚好相反如果我们先释放了高层指针这样我们就会丢失底层指针从而无法释放那些指针指向内存造成内存泄漏正确释放内存思路方法如下:
//freeing up memoryallocated to second level poers
for( i = 0; i<4; i)
{
free(float_values[i]);
}
//freeing up memoryallocated to first level poers
free(float_values);
最新评论