[英]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.