国产丰满大乳无码免费播放_久草一级毛片_国产av黄色一区二区_亚洲一级 片内射欧美乱强上司_制服丝袜亚洲日韩中文字幕欧美_亚洲av中文小島_国产精品无码久久av嫩草下载_91视频黄片软件APP大全

XML|HTML|TXT
您當前位置: 軟件開發>> 新利在線娛樂>> 軟件開發技術>> 瀏覽文章

c中malloc和memset在多維數組上的應用

山東軟件開發認為,兩者都是對內存進行操作的函數。應用在多維數組上時,需特別注意一下。

  首先看看兩者原型。

  1.malloc函數,用于從堆上分配指定字節的內存空間。

  void * malloc(size_t n);

  n為要求分配的內存字節數。如果執行成功,函數返回獲得的內存空間的首地址;執行失敗,返回值為NULL。

  由于函數返回值值的類型為void的指針,因此,可以將void指針類型轉換后賦值給任意類型指針,這樣就可以通過操作該類型指針來操作從堆上獲得的內存空間。

  malloc函數分配得到的內存空間是未初始化的。有時候,在使用前需要對該內存空間進行初始化,此時用上memset。

  2.memset函數

  void * memset (void * p,int c,size_t n);

  指針p為所操作的內存空間的首地址,c為每個字節所賦的值,n為所操作內存空間的字節長度,也就是內存被賦值為c的字節數。

  注意的它是以字節為單位進行賦值的,賦值范圍是0x00~0xFF。

  在多維數組上的應用。如二維。

  double **weight; //二維數組weight[n][m]

  weight=(double**)malloc(n*sizeof(double*)); //注意是sizeof里頭是double*而不是double。該維裝的是指針

  int i=0;

  for(;i

  weight[i]=(double*)malloc(n*sizeof(double));

  memset(weight[i],0,n*sizeof(double)); //正確。注意是對weight[i],而不是weight

  }

  //memset(weight,0,sizeof(n*n*sizeof(double));

  //這樣的統一對整個二維數組初始化是錯誤的,因為該二維數組是通過分次malloc得到的,各內存不一定連續

  //但如果是直接聲明的多維數組如a[5][5],其內存肯定是連續的,此時統一memset沒問題。


手機:18678812288 E-Mail:1069706080@qq.com
地址:山東省濟南市舜耕路泉城公園東門園內向北50米 魯ICP備07011972號 版權所有2008-2013 新利體育18
Baidu