2012-02-09 120 views
0
#include <stdio.h> 
#include <stdlib.h> 
#define MAX 10 
void main() 
{ 
int *ptr, *arr[MAX]; 
int i, j; 
for (i=MAX-1; i>=0; i--) 

if (arr[i]=(int*)malloc(i*sizeof(int))) // <= that line! 

for (j=0; j<i; j++) 
*(*(arr+i)+j) = j*i; 

ptr = *(arr+MAX-1); 
while (*ptr)  
printf ("%d ", *ptr--); 
} 

我不明白這是什麼命令的目的:這段代碼的目的是什麼?

arr[i]=(int*)malloc(i*sizeof(int)) 

我知道,這樣的malloc動態分配。 但是,arr [i]是什麼意思呢給了sizeof * i? 謝謝。

+0

Ehm,我假設你試圖強調你的代碼中的if語句? (使用** **)你可能想要刪除它。編輯:謝謝@NiklasB – Bart 2012-02-09 12:24:29

+0

哎呀!你是否意識到你的代碼中有6行代碼(其中2個爲空)?我建議你把這個陳述分成更小的陳述。 – pmg 2012-02-09 12:26:02

+0

http://en.wikipedia.org/wiki/Triangular_matrix – 2012-02-09 12:34:58

回答

0

它將越來越長的數組作爲arr的每個元素進行分配。所以arr [0]指向一個0大小的數組,arr [2]指向一個2個數組的數組,依此類推。

2

您正在談論的命令分配長度的塊即足以存儲iint型的,並存儲在指針稱爲arr的陣列中的第i位置的結果。該程序創建一個「三角形」陣列:其元素是不同長度的陣列,排列順序爲arr[i]可以包含i元素。

順便說一下,此代碼缺少對free對其已分配項目的調用。

0

arr是指向int的指針數組。它的每個元素 - arr[x] - 是一個指向int的指針,因此是一個數組。它是一個int數組的數組。

對於數組中的每個元素,都可以創建一個大小爲當前索引的數組。

請注意,雖然您的代碼是非法的,因爲當i==0時,您會撥打malloc(0)

此外,最好不要拋出返回類型malloc

1
int *ptr, *arr[MAX] 

創建一個指向int的指針和一個指向int的MAX元素指針的數組。

arr[i]=(int*)malloc(i*sizeof(int)) 

爲每個int指針分配i整數的空間。

1

起初sizeof()「返回」(它應該在編譯期間用數值替換)所提供的類型的大小。對於int(64b機器上的8個)的裝置4,對於char等的裝置4等等。

因此i*sizeof(int)意味着我整數的大小(i = 4; sizeof(int) = 4;比它的16)。

malloc()使用字節數作爲參數分配,因此malloc(16)分配16字節,有足夠的空間用於4 4B整數。

(int*)只是像C-破解有正確的類型(因爲要使用這些16B爲int[4]不是void *)。

整個代碼的意思是分配空間我its在陣列的第i位(1在第一,2在第二...)。然而,我漫步0會發生什麼,當你嘗試分配0字節:)