c语言中二级指针和二维数组,二级指针和二维数组

C/C++ code// array2D 是一个指针,它指向一个数组,该数组的每个元素为一个指针,他指向每行的起始地址。

int get_mem2D(byte **&array2D, int rows, int columns) // 传引用byte **&array2D。 这才是给你传入指针分配空间。

{

int i;

// 给 行指针 分配空间。这里并不是给二维数组元素分配空间。

if((array2D = (byte**)malloc(rows*sizeof(byte*))) == NULL)

{

return 0;

}

// 这里才是给二维数组分配空间

byte *p;

if((p = (byte*)malloc(columns*rows*sizeof(byte))) == NULL)

{

return 0;

}

/*每个 行指针 指向正确的位置。就是行起始的位置*/

for(i=0;i

{

array2D[i] = p;

p += columns; //p指向下一行位置。

}

return rows*columns;

}

// 也应该传引用,并把指针指向NULL。传值的话,就在外面指向NULL

void free_mem2D(byte **&array2D)

{

if (array2D)

{

//释放二维byte数组空间

if (array2D[0])

free (array2D[0]);

else exit(6);

//释放一维 行指针 数组的空间

free (array2D);

} else{

exit(6);

}

array2D = NULL;

}

int main(int argc, char *argv[])

{

int r,c,x;

byte **p;

get_mem2D(p, 2, 3);

x = 1;

for(r = 0; r < 2; r++)

for(c = 0; c < 3; c++)

{

p[r][c] = x++;

}

for(r = 0; r < 2; r++)

{

for(c = 0; c < 3; c++)

{

printf("%d ", p[r][c]);

}

printf("\n");

}

free_mem2D(p);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值