这里是我编写怎么看结构的内存分配工作的快速测试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