gpt4 book ai didi

c - struct 的初始化函数(即 "constructor"),为什么变量没有正确初始化?

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:57 25 4
gpt4 key购买 nike

我有一个名为“FooStruct”的未命名结构,我为它编写了一个函数来初始化它的所有变量并负责动态内存分配。

我尝试运行这段代码,但它没有产生我期望的结果。出于某种原因,变量在函数内部正确初始化,但一旦退出 block ,它们就会再次更改。

我正在从事的一个项目要求我只使用未命名的结构。为什么会这样?

#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));
}

最佳答案

C 语言只有按值传递语义,因此当您将指针传递给函数时,指针的原始值不会改变,只会改变函数中的本地副本。

解决这个问题的方法是将指针传递给指针,这样您就可以更改原始内存位置的值。

void FooStructInit(FooStruct **ptr, int num) {
*ptr = malloc(sizeof(FooStruct));
...
}

int main(void) {
FooStruct * ptr;
FooStructInit(&ptr, 5); /* get the address of the pointer */
...
}

关于c - struct 的初始化函数(即 "constructor"),为什么变量没有正确初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33203072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com