2012-04-30 36 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。