最近在用c解leetcode題目時,碰到一題需要返回乙個動態二維陣列的頭指標,搞了半天才弄好。
用c語言建立二維動態陣列有兩種方式。
1.轉化為指標陣列申請,**如下。
const int cols = 10;
int rows = 10;
int(*p)[cols];
p = (int(*)[cols])malloc(rows*cols *sizeof(int));
free(p);
p = null;
注意:
int(*p)[cols]與int* p[cols]不同。前者申請了乙個指向陣列的指標,即陣列指標,等同於int a[cols], int*p =a,後者申請了乙個元素為指標的陣列,即指標陣列,等同於typedef int* pint; pint p[cols]
此法中如要返回二級指標,這應該使用(int**)進行強制轉換,並且在讀取值時不能使用int t =p[i][j],而應當使用int t =*(p+i*cols+j)=p[i*cols +j]; 因為對於二維陣列,a[10][10],a只是乙個一級指標而已。
2.直接申請乙個二級指標,先為每行的頭位址申請空間,再依據每行頭位址逐行申請空間。
const int cols = 10;
int rows = 10;
int **p =null;
int i = 0;
p = (int**)malloc(rows *sizeof(int*));
for (i = 0; i < rows; i++)
for(i = 0; i < rows; i++)
free(p);
p = null;
此方法申請和釋放記憶體都比較麻煩,但是只需要返回乙個二維陣列的頭指標便可,並且獲取值時可直接使用int t =p[i][j] =*(*(p+i)+j).
C語言二位陣列
前言 今天在實現裝配線排程程式時候,用到了二維陣列,並將其作為函式的引數。在寫程式的時候,遇到一些問題,即二維陣列做函式的引數應該如何正確表示。我寫程式的錯誤如下程式所示 1 include 2 void print int a 3 3 67intmain 8 10print a 11return0...
c語言中二維陣列的傳遞
c語言中經常需要通過函式傳遞二維陣列,有三種方法可以實現,如下 方法一,形參給出第二維的長度。例如 include void func int n,char str 5 void main func 3,str 方法二,形參宣告為指向陣列的指標。例如 include void func int n,...
C語言中二維陣列和指標
a或 a 1 行位址 a i 行位址加列位址test 如下所示 include int main void 第一行位址 printf p,p,p,p n nums,nums 0 nums,nums 0 第二行位址 printf p,p,p,p n nums 1,nums 1 nums 1 nums ...