gpt4 book ai didi

c - 如何使用指针初始化结构?

转载 作者:行者123 更新时间:2023-12-02 05:36:43 25 4
gpt4 key购买 nike

初学C,在练习的时候遇到了这个问题。
结构:

 typedef struct {
char name[20];
int score[3];
int no;
} Student;

初始化:

Student *pStudent;
strcpy(pStudent->name,"Kven");
pStudent->score[0]=1;
pStudent->score[1]=2;
pStudent->score[2]=3;
pStudent->no=1;

如果“pStudent”不是指针,我可以正确处理。但是如果它是一个指针,我总是会得到一个“bad access”的错误。如果我必须使用指针,如何解决它?谢谢。

最佳答案

指针类型的变量存储另一个变量在内存中的地址(它指向另一个变量)。

您的变量 pStudent 未初始化。它没有指向任何东西。事实上,它包含一些垃圾值,大多数情况下,这些值是不允许程序写入的内存区域的地址。这就是为什么当您尝试在那里写入(调用 strcpy())时,操作系统会将您的程序拍打在它的“手”上,并以您提到的错误消息终止它。

如何正确使用指针

指针的一种用法是指向某个静态分配的(在程序中定义的)变量:

Student s, *pStudent = &s;

这个例子声明了Student类型的变量s和指向它的变量pStudent。注意它是用 &s 初始化的,它是 s 的地址。现在,您的代码使用 pStudent 来初始化 s 的字段。

指针的另一种用法是在运行时动态分配内存:

Student *pStudent;
pStudent = malloc(sizeof(Student));

在这种情况下,pStudent 被初始化为 Student 类型的新变量的地址,该变量是在运行时创建的(它没有名称)通过调用malloc() . malloc() 分配一 block 内存(指定大小)并返回其地址。

当你不需要它时,你必须释放由 malloc() 分配的内存(使用 free() )以供重用:

free(pStudent);

调用之后,变量 pStudent 的值没有改变,它仍然指向同一个地址,但它是无效的,使用它会产生未定义的行为。在再次使用它之前,您必须将另一个 Student 结构的地址放入 pStudent 中(使用此处介绍的两种方法之一)。

关于c - 如何使用指针初始化结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29651803/

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