簡體   English   中英

我需要幫助來了解這一行代碼來動態創建數組嗎?

[英]I need help understanding this line of code dynamically creating an array?

我開始對malloc進行更多的練習,盡管正確執行的代碼沒有錯。

int *arr = (int *)malloc(x * y * sizeof(int));
int i, j, r;

for(i=0; i<x; i++){
    for(j=0; j<y; j++){
        r = 0 + rand() % 7;
        *(arr + i*y + j) = r; 
   //I dont understand the left hand portion of the above line.

//x and y are both 5000

我在網上找到了它,在找到它之前,我曾嘗試做完全相同的事情,但是我想我的語法是錯誤的。 無論如何,我需要幫助來了解旁邊有評論的行

*(arr + i*y + j)試圖將值存儲在由array[i][j]表示的數組元素中。

從R個接收在先前行什么值,被饋送到陣列的陣列的[I] [j] 元件。

arr定位數組的基本元素,將i*y添加到數組的第(i + 1)行(索引計數從C中的0開始) ,然后向其添加j生成確切的列(第j + 1個)列)其中array[i][j]所在。

第一行中分配的內存塊被用作二維矩陣。 有關更多信息,請閱讀: row / column-major order

這是一個圖:

大行

該圖可能應該基於表達式中y的使用而進行轉置,但是概念是相同的。 每個框中的數字是線性偏移量。 如您所見,線性存儲器塊中的偏移量等於行索引乘以寬度加列索引,即i*y + j

通常,您要做的是將2D數組聲明為int arr[5000][5000]; 或等效的malloc代碼。

在這種情況下,要做的是聲明一維數組,但將其用作二維數組。 這種方法也是可行的,但是它涉及不斷檢查位置的額外開銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM