我有上面的代码,但输出不是我的预期。
typedef struct
{
int a;
}node, *nodePtr;
nodePtr* createTest()
{
nodePtr *head = (nodePtr*)malloc(3 * sizeof(nodePtr));
node n1 =
{
3
};
node n2 =
{
4
};
node n3 =
{
5
};
head[0] = &n1;
head[1] = &n2;
head[2] = &n3;
return head;
}
int main()
{
nodePtr *n = createTest();
nodePtr n0 = (nodePtr)(n[0]);
printf("0: %d\n", n0->a);
n0 = n[1];
printf("1: %d\n", n0->a);
n0 = n[2];
printf("2: %d\n", n0->a);
return 0;
}
输出应为3,4,5。 但我得到了3,1和一个随机数。为什么会这样?
答案 0 :(得分:1)
head[0] = &n1;
head[1] = &n2;
head[2] = &n3;
n1
,n2
,n3
是局部变量。函数createTest
退出后使用其地址是未定义的行为。