gpt4 book ai didi

c - C 中的指针、结构和函数

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

我正在学习 C 中的指针和动态数组,但我不清楚 C 中的指针。如果有人可以根据以下信息验证我对以下代码的理解,我将不胜感激:

/*Struct*/
typedef struct {
int *pInt;
}newStruct

/*Functions*/
newStruct *createMyStruct() {
//codes
}

void printNewStruct(newStruct *pStruct) {
//codes
}

请验证:

  1. int *pInt:这是结构中的 int 类型数组
  2. newStruct *createMyStruct:一个名为 createMyStruct 的函数。 createMyStruct 是指向 newStruct 的指针,并创建 newStruct 的副本。
  3. newStruct *pStruct:pStructcreateMyStruct 相同(?)

问题:
1) 当我在一个函数中使用 malloc (例如上面代码中的 createMyStruct 函数)来分配内存时,我必须在哪里释放这个内存?在函数内部还是在 main 中?如果在 main 中,为什么在 main 中?我以为内存必须在使用后立即释放。

如果我的上述陈述不清楚,我深表歉意......我仍然对指针和 malloc 感到很困惑。请为新手简单地验证/解释。

最佳答案

好吧,让我们试着澄清一下:1) int *pInt 是一个指向 Integer 的指针。这可以指向数组的第一个值,但不是必须的。
2) newStruct *createMyStruct() 是一个函数,它的返回值是一个指向 newStruct 结构的指针。很可能您想在此函数中 malloc 并让它返回指针。
3) newStruct *pStruct 表示此函数的输入参数是指向 newStruct 结构的指针,在本例中名为 pStruct(我假设您知道如何处理 C 中的参数)

至于您的问题:这有点取决于您何时不再需要分配的内存。如果您要在 createMyStruct() 函数中释放它,您基本上会返回一个指向无效位置的指针(如果您尝试取消引用它会导致未定义的行为)。通常,只有当您完全确定不再需要分配的内存时,才应该释放您分配的内存。您可以在 main 中执行此操作,也可以编写您自己调用的函数。

关于c - C 中的指针、结构和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19637518/

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