這裏是我編寫怎麼看結構的內存分配工作的快速測試C程序...這個靜態分配的結構數據如何在函數外部使用?
#include <stdio.h>
#include <stdlib.h>
typedef struct _node {
int kk;
int zz;
} node;
node ** createNode(){
node** res = (node**) malloc(sizeof(node*)*10);
int i,j;
for(i= 0;i<10;i++){
res[i] = (node*) malloc(sizeof(node)*10);
for(j=0;j<10;j++){
res[i][j].kk=33;
}
}
return res;
}
int main(void) {
node ** g = createNode();
printf("%d",g[0][0].kk);
return 0;
}
該程序將打印值「33」。現在這已經變得很明顯,但反映在它上面,我不明白爲什麼......
現在我想起來了,應該不是變量g
是node ***
?
而打印語句看起來像printf("%d",g[0][0]->kk);
?
在第二個版本中,我基本上做了和原始代碼一樣的事情,但我有一個指向節點的指針,而不是實際的節點。
這兩者之間的區別是第一個靜態分配(我認爲)和第二個是動態分配的......並且不應該在我的createNode()函數中創建的節點值被銷燬一次那個函數的範圍之外?
只是有點困惑都是:■我需要有人來澄清這對我來說,是什麼node**
和node***
如果您連續輸入3顆星,您應該退一步考慮重新設計您的代碼或放入另一個抽象。 – user2357112