1. 程式人生 > >c 二維陣列動態分配和釋放

c 二維陣列動態分配和釋放

一、 已知第二維

二、 已知第二維

三、 已知第一維, 一次分配記憶體(保證記憶體的連續性)

四、兩維都未知

 五、兩維都未知, 一次分配記憶體(保證記憶體的連續性)

 

 注意:靜態二維陣列作為函式引數傳遞

如果採用上述幾種方法動態分配二維陣列,那麼將對應的資料型別作為函式引數就可以了。這裡討論靜態二維陣列作為函式引數傳遞,即按照以下的呼叫方式:

int a[2][3];
func(a);

C語言中將靜態二維陣列作為引數傳遞比較麻煩,一般需要指明第二維的長度,如果不給定第二維長度,則只能先將其作為一維指標傳遞,然後利用二維陣列的線性儲存特性,在函式體內轉化為對指定元素的訪問。
首先寫好測試程式碼,以驗證引數傳遞的正確性:
(1)給定第二維長度

Code-11
void func(int a[][N])
{
printf("%d\n", a[1][2]);
} 

(2)不給定第二維長度

Code-12
void func(int* a)
{
printf("%d\n", a[1 * N + 2]);//計算元素位置
} 

注意:使用該函式時需要將二維陣列首地址強制轉換為一維指標,即func((int*)a);

相關推薦

c 陣列動態分配釋放

一、 已知第二維 二、 已知第二維 三、 已知第一維, 一次分配記憶體(保證記憶體的連續性) 四、兩維都未知  五、兩維都未知, 一次分配記憶體(保證記憶體的連續性)    注意:靜態二維陣列作為函式引數傳遞 如果採用上述幾種方法動態分配二維陣列,那

C語言 陣列動態分配釋放

(1)已知第二維 Code-1 char (*a)[N];//指向陣列的指標 a = (char (*)[N])malloc(sizeof(char *) * m); printf("%d\n", sizeof(a));//4,指標 printf("%d\n", sizeof(a[0])

C++陣列動態記憶體分配【轉】

(轉自:https://www.cnblogs.com/Forever-Kenlen-Ja/p/3753566.html)   /*申請3行4列的二維陣列記憶體*/ int **array; array = new int *[3];/*先申請3個int*型

C++ 陣列動態記憶體分配過載以及拷貝構造

總時間限制:  1000ms   記憶體限制:  65536kB // 在此處補充你的程式碼 描述 寫一個二維陣列類 Array2,使得下面程式的輸出結果是: 0,1,2,3, 4,5,6,7, 8,9,10,11, next

C語言為陣列動態分配記憶體的問題

C語言中動態分配一位陣列是很簡單的,但是沒有可以直接對二維陣列進行動態分配的函式,因此,要相對二維陣列動態分配記憶體,便要藉助於一位陣列來實現,具體如下: 假設要為一個n*m的二維陣列分配動態

vector中儲存指標 陣列動態分配記憶體

int num = 2; vector<int*> v(16); v.push_back(NULL); v.push_back(&num); v.push_back(NULL);

指標陣列陣列指標、陣列動態分配記憶體

1. 二維陣列動態分配和釋放 1. 已知第二維 char (*a)[N];//指向陣列的指標 a = (char (*)[N])malloc(sizeof(char *) * m); printf("%d\n", sizeof(a));//4,指標

cuda陣列記憶體分配資料拷貝

因為cuda具有高效利用GPU進行科學計算的優勢,而人工智慧的重點之一就是複雜的計算任務,因此學好GPU計算是學習AI的重點任務。這裡,我們即將進行利用共享記憶體的矩陣運算。 我們看一個例子,如何對矩陣進行分配顯示卡記憶體以及元素賦值操作。通常來講,在GPU中分配記憶體使用的是cudaMalloc函式,

C++ 陣列/多陣列動態分配(new)釋放(delete)

1. 一維陣列 對於簡單的一維陣列動態記憶體分配和釋放,如下:int *array1D;//假定陣列長度為m //動態分配空間 array1D = new int [m]; //釋放 delete [] array1D; 2. 二維陣列 二維陣列的動態分配和釋放//假

C語言 陣列(指標)動態分配釋放

C 二維陣列(指標)動態分配和釋放 先明確下概念: 所謂32位處理器就是一次只能處理32位,也就是4個位元組的資料,而64位處理器一次就能處理64位,即8個位元組的資料。如果我們將總長128位的指令分別按照16位、32位、64位為單位進行編輯的話:舊的16位處理器,比如In

C語言 數組(指針)動態分配釋放(轉)

i++ 進制 numbers 很多 print 算術 uil 換算 som C 二維數組(指針)動態分配和釋放 先明確下概念: 所謂32位處理器就是一次只能處理32位,也就是4個字節的數據,而64位處理器一次就能處理64位,即8個字節的數據。如果我們將總長128位的指令分別

C++ 陣列動態分配

總時間限制:  1000ms 記憶體限制:  65536kB // 在此處補充你的程式碼 描述 填空,使得程式輸出指定結果 #include <iostream> using namespace std; int main() { int *

c++ 的用 new delete 進行陣列動態記憶體的建立刪除

1.陣列指標 A (*ga)[n] = new A[m][n]; ... delete []ga; 2.二級指標 A** ga = new A*[m]; for(int i = 0; i < m; i++)

C/C++陣列二級指標

轉載自http://blog.csdn.net/wu_nan_nan/article/details/51741030 C/C++二維陣列名和二級指標 原創 2016年06月23日

C++陣列作引數時指標的異同

二維陣列傳參 二維陣列不同於一位陣列,一維陣列傳引數時只需要傳指標即可,無需指定大小。二維做引數時必須指定第二維的大小,否則編譯不過。 void lalala(int a[][],int m, int n) //編譯報錯 void lalala(int a[][10]

C/C++陣列陣列指標)——陣列的傳值陣列的一訪問

二維陣列既可以通過二維訪問也可以通過一維訪問。 對於二維陣列的傳值,引進了陣列指標。 #include <stdio.h> void foo(int *p,int n)//一維訪問 {

C++——陣列物件陣列

6.3 二維陣列的宣告和引用 宣告:資料型別 識別符號[常量表達式1][常量表達式2];int a[3][4]; 表示a為整型二維陣列,其中第一維有3個下標(0~2),第二維有4個下標(0~3),陣列元素12個,可以用來存放3行4列的整型資料表格。可以理解為: a[0]—

C語言陣列的定義引用

一維陣列只有一個下標,稱為一維陣列,其陣列元素也稱為單下標變數。在實際問題中有很多量是二維的或多維的,因此C語言允許構造多維陣列。多維陣列元素有多個下標,以標識它在陣列中的位置,所以也稱為多下標變數。本節只介紹二維陣列,多維陣列可由二維陣列類推而得到。 二維陣列的定義 二維

C#用for迴圈設定陣列下標元素

https://blog.csdn.net/number1killer/article/details/80021129遍歷陣列          https://blog.csdn.net/numbe

c++語言 如何計算陣列行數列數

對於一個二維陣列如: int a[2][5]; 求陣列元素的總數: sizeof(a) / sizeof(int) 而陣列行數則為 :( sizeof(a) / sizeof(int) )/ ( sizeof(a[0]) / sizeof(int) ) 求陣列列數: siz