国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

在C語言中實現(xiàn)動態(tài)分配二維數(shù)組

2019-11-17 05:48:22
字體:
供稿:網(wǎng)友

  在C語言中動態(tài)的一維數(shù)組是通過malloc動態(tài)分配空間來實現(xiàn)的,動態(tài)的二維數(shù)組也可以通過malloc動態(tài)分配空間來實現(xiàn)。

  實際上,C語言中沒有二維數(shù)組,至少對二維數(shù)組沒有直接的支持,取而代之的是“數(shù)組的數(shù)組”,二維數(shù)組可以看成是由指向數(shù)組的指針構(gòu)成的數(shù)組。對于一個二維數(shù)組p[i][j],編譯器通過公式*(*(p+i)+j)求出數(shù)組元素的值:

  1、p+i 計算行指針。

  2、*(P+i) 具體的行,是一個指針,指向該行首元素地址。

  3、*(P+i)+j 得到具體元素的地址。

  4、*(*(p+i)+j) 得到元素的值。

  基于上述原理,我們可以通過分配一個指針數(shù)組,再對指針數(shù)組的每一個元素分配空間實現(xiàn)動態(tài)分配二維數(shù)組。

  實現(xiàn)

  下面是本人寫的一個動態(tài)分配二維數(shù)組的實現(xiàn),適用于任何類型的二維數(shù)組,可以直接使用。

  類型定義和錯誤代碼

typedef unsigned char MK_Byte;

#define SUCCESS 0 /*No error*/
#define MFAILED 1 /*General failure*/
#define MNOMEMORY 2 /*Out of memory*/

聲明

//確保初始化
#define DeclareTwoDArray(ATYPE, iname) ATYPE ** iname = NULL

//定義自己的malloc和free,確保內(nèi)存正確操作
#define MKMALLOC(nsize) malloc(nsize)
#define MKFREE(name) /
if (NULL != name)/
free(name);/
name = NULL
  實現(xiàn)

int MKCreatArray(int nsize, int X, int Y, void *** parray)
{
 void ** tdarray = NULL;
 MK_Byte * tmparray = NULL;
 int i = 0;

 *parray = NULL;

 //分配指針數(shù)組
 if (!(tdarray = (void **)MKMALLOC(sizeof(MK_Byte *) * Y))) {
  return MNOMEMORY;
 }
 //分配實際數(shù)組空間
 if (!(tmparray = (MK_Byte * )MKMALLOC(nsize * (X * Y)))) {
  MKFREE(tdarray);
  return MNOMEMORY;
 }

 //初始化內(nèi)存
 memset(tmparray, 0x00, nsize * (X * Y));

 //指針數(shù)組賦值
 for (i = 0; i < Y; i++)
  tdarray[i] = (tmparray + (i * X) * nsize);

 *parray = tdarray;
 return SUCCESS;
}

void MKFreeArray(void *** parray)
{
 if (*parray) {
  MKFREE((*parray)[0]);
  MKFREE((*parray));
 }
}
  使用

void testTwoDArray()
{
 //聲明數(shù)組
 DeclareTwoDArray(int, a);
 DeclareTwoDArray(float,b);

 //創(chuàng)建整型數(shù)組
 MKCreatArray(sizeof(int), 3, 2, &a);
 a[1][2] = 10;
 a[0][1] = 23;
  //使用完一定要FREE
 MKFreeArray(&a);

 //重新分配數(shù)組
 MKCreatArray(sizeof(int), 6, 6, &a);
 a[5][5] = 234;
 a[4][0] = 567;
 printf("%d,%d/n",a[5][5],a[4][0]);
 MKFreeArray(&a);

 //創(chuàng)建浮點數(shù)組
 MKCreatArray(sizeof(float),2,2,&b);
 b[0][0] = 0.5f;
 b[1][1] = 0.006f;
 printf("%g,%g/n",b[0][0],b[1][1]);
 MKFreeArray(&b);
}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南丰县| 海兴县| 聂拉木县| 额济纳旗| 长汀县| 仪征市| 玛沁县| 辽宁省| 和顺县| 罗平县| 民和| 共和县| 定州市| 开远市| 望谟县| 自贡市| 安塞县| 定安县| 聂拉木县| 虹口区| 靖安县| 开远市| 出国| 沽源县| 屏南县| 阿城市| 西和县| 偃师市| 松阳县| 碌曲县| 赤水市| 醴陵市| 裕民县| 嘉定区| 泸定县| 宁安市| 南充市| 镇沅| 崇礼县| 宣城市| 将乐县|