【发布时间】:2015-10-18 20:46:59
【问题描述】:
我有一个名为“FooStruct”的未命名结构,我为它编写了一个函数来初始化它的所有变量并负责动态内存分配。
我尝试运行此代码,但它没有产生我期望的结果。由于某种原因,变量在函数内部被正确初始化,但是一旦退出块,它们就会再次改变。
我正在进行的一个项目要求我只使用未命名的结构。为什么会这样?
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int fooPrimitive;
} FooStruct;
void FooStructInit(FooStruct * ptr, int num) {
ptr = (FooStruct*)malloc(sizeof(FooStruct));
ptr -> fooPrimitive = num;
// Expected output: 5
// Actual output: 5
printf("ptr -> fooPrimitive: %d\n", (ptr -> fooPrimitive));
}
int main() {
FooStruct * ptr;
FooStructInit(ptr, 5);
// Expected output: 5
// Actual output: some random number
printf("FooStruct -> fooPrimitive: %d\n", (ptr -> fooPrimitive));
}
【问题讨论】:
-
您不应在箭头
->或点.运算符周围使用空格。它们结合得非常紧密;这应该通过不包括它们周围的任何空间来直观地显示。 (是的,就语法而言,空格很好;标记之间的任何位置都允许有空格,因此您可以将每个标记写在自己的行上。为了便于阅读,不要在箭头或点周围包含空格。) -
感谢您告诉我这一点,尽管他们并没有真正消除问题。
-
YW:这就是为什么它是评论,而不是答案。
标签: c struct initialization