2010-03-18 142 views

回答

17

您將不得不知道該功能實際上期待什麼,並相應地修改接口。如果它期待一個二維陣列(char [N][M])正確的接口將是:

extern int docx(char *,char*[M]); 

哪個不同於:

extern int docx(char*, char**); 

在第一種情況的功能將被期待一個指針到一個連續的塊(&p[0][0]+M == &p[1][0](void*)&p[0][0]==(void*)&p[0]),而在第二種情況下,它會期望指向一個內存塊的指針,該指針指向可能連續或不連續的內存塊的指針(&p[0][0]&p[1][0]無關和p[0]==&p[0][0]

// case 1 
ptr ------> [...M][0123.........M]...[0123.........M] 

// case 2 
ptr ------> 0 [ptr] -------> "abcde" 
      1 [ptr] -------> "another string" 
       ... 
      N [ptr] -------> "last string" 
+0

謝謝。 你提供了一個很好的材料。 – ambika 2010-03-18 12:36:22

2

char *[M] 是沒有從char **不同。 char *[M]是一個char指針數組。維度在C中不起作用(在這種情況下)。大衛的意思是char (*)[M]這是一個指向M字符的指針,這將是你的原型的正確類型 - 但你的char [][M]也很好(實際上它是更常見的表述)。

相關問題