用C中的指针修改结构成员

时间:2019-07-12 06:33:15

标签: c

我正在尝试以一种非常about回的方式将值分配给结构的成员。这是我正在采取的步骤:

  1. 主要,创建一个结构指针数组。
  2. (仍然在main中)将指向该数组的指针传递给函数。
  3. 在函数内部,创建一个结构并将指向该数组的指针添加到该数组。
  4. (仍在函数内部)为刚创建的结构的成员分配一个值。

我对C还是很陌生,所以我对指针没有很好的了解。我以为这个过程可以让我看到从main分配的值,但是当我打印它时,它似乎是空的。我在做什么错(除非很明显-我使这种方式过于复杂)? 这是代码:

#include <stdio.h>
#include <string.h>

struct MyStruct {
    char name[9];
};

void give_name(struct MyStruct ** structlist_ptr) {
    struct MyStruct new_struct;
    structlist_ptr[0] = &new_struct;
    strcpy(structlist_ptr[0]->name, "confused");
}

int main(void) {
    struct MyStruct * struct_list[1];

    give_name(struct_list);
    printf("%s\n", struct_list[0]->name); /* Appears to print random characters */

    return 0;
}

1 个答案:

答案 0 :(得分:8)

主要问题是此作业:

structlist_ptr[0] = &new_struct;

这样,您就使*structlist_ptr(使用“引用”指针的常用方式)指向 local 变量new_struct

函数返回后,局部变量的生存期将随着它们超出范围而终止。从某种意义上说,它们将不复存在。这就给您留下了一个流浪和无效的指针。尝试取消引用会导致不确定的行为