指標和malloc構建一個可變二維陣列
阿新 • • 發佈:2019-01-29
以前我一直覺得要指標幹啥呢,要訪問一塊記憶體直接宣告一個變數去訪問不就完了。直到當我想實現一個可變二維陣列才發現沒法用直接宣告的方式去實現。因為我不知道陣列會有幾行,每行有多少個元素。所以這個時候只能先宣告一個二維指標,然後當知道了可變陣列有幾行,每行有幾個元素之後,在用malloc或者free分配相應的記憶體。
下面的程式碼實現功能為:
輸入:2 2
3 1 5 4
5 1 2 8 9 3
0 1
1 3
輸出:5
9
解讀:讀入第一行第一個資料為二維陣列的行數,第二資料為要查詢的資料個數。
讀入第二行第一個資料為這行有多少個元素,後面的資料這是這行的元素
讀入第三行同第二行一個個道理
讀入第四行第一個資料表示要讀取資料的行數,第二個數表示要讀取資料的列數
讀入第五行同第四行一個道理
#include <cstdio> #include <iostream> using namespace std; int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ int n,q,h,g,i,j; cin>>n>>q; int *a[n]; int num[n]; for(h=0;h<n;h++) { cin>>num[h]; a[h]=(int*)malloc(sizeof(int)*num[h]); for(g=0;g<num[h];g++) { cin>>a[h][g]; } } for(h=0;h<q;h++) { cin>>i>>j; cout<<a[i][j]<<endl; } return 0;
這個小練習讓我加深理解了指標和malloc的用法。還記得以前看書上記憶體管理的部分時 ,得知宣告定義一個變數同樣是分配記憶體,當時就特別不理解為啥要多此一舉搞一個malloc函式也來分配函式。做完上面的小練習就知道了動態分配記憶體還得靠malloc,而且用指標和malloc來分配記憶體可以使用迴圈來進行偷懶。不然宣告變數的時候光敲那些變數名都夠耗費時間的了。