2012-04-30 39 views
0

我有一些問題理解指針C地塊分割c語言

我有矩陣然後我通過使用

tiles_num = n /tile; 
// Allocate blocked matrix 
Ah = (REAL **) malloc(tiles_num * tiles_num * sizeof(REAL *)); 
if (Ah == NULL) { 
    printf("ALLOCATION ERROR (Ah)\n"); 
    exit(-1); 
} 

for (j = 0; j < tiles_num * tiles_num; j++) { 
    Ah[j]=(REAL *) malloc(tile * tile * sizeof(REAL)); 
    if (Ah[ j ] == NULL) { 
     printf("ALLOCATION ERROR (Ah[%d])\n", j); 
     exit(-1); 
    } 
} 

在那裏分成小塊(tiles_num較小塊的數,n是矩陣的一維,瓦是小塊的大小)

之後,我想給一個函數只是一個指向超級塊的開始的指針,然後函數將在小塊 之間移動,例如,如果我有N = 12和su perblock = 4和smallblock = 2。 1-so我如何給出啓動超級塊的功能點,然後通過小塊移動到內部?

2 - 我想知道A [k]是否與參考A + k相同?

+0

不要在'C中輸入'malloc'的結果。這樣做可能很危險,因爲如果忘記爲'malloc'包含頭部,編譯器會認爲'malloc'返回'int'。通過強制轉換,您迫使編譯器將'malloc'的結果解釋爲將int轉換爲REAL *或REAL **,如果sizeof(int)!= sizeof會導致嚴重的問題(REAL *)'。如果沒有強制轉換,編譯器必須發出診斷消息(通常是警告),並且很明顯,您忘記了包含'' – dreamlax

回答

0

如果我正確地理解了這個問題,您可以將Ah傳遞給您的函數,因爲Ah是指向小塊列表的指針。這是否回答你的問題?

關於你的第二個問題,A [k]是地址A + k的值。所以A [k]實際上等於*(A + k),或者相反,&(A [k])等價於A + k。