gpt4 book ai didi

c - 在结构中使用带字符串指针的点运算符与箭头运算符

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:23 24 4
gpt4 key购买 nike

Q1:我试图理解为什么在这段代码中我应该在调用字符串指针时使用点运算符而不是用于指针的箭头。

问题 2:如果我尝试初始化年龄,我会使用点运算符吗?

typedef struct Person 
{
char *name;
int age;

} Person;

Person* deletePerson(Person *person, int totalPeople)
{
int i;

for(i=0; i<totalPeople; i++)
{
free(person[i].name);
free(person);
}

return NULL;
}

最佳答案

当您有一个指向左侧结构(或 union )的指针和点时,您需要使用箭头->运算符。 运算符,当你在左边有一个结构时。它不取决于右边的内容。

如果 person 是指向单个 Person 的指针,要访问它的字段,您将使用 person->name人->年龄

但是这里的 person 显然是指向 Person 数组第一个元素的指针。 (指向第一个元素的指针是数组在 C 中传递的方式。)要访问数组的单个元素,您可以使用下标运算符(方括号 [...]):person [我]person[i] 是索引为 i 的元素,而不是指向索引为 i 的元素的指针。由于 person[i] 是一个结构,您可以使用点运算符访问它的字段。


此外,正如其他人已经指出的那样,循环内的 free(person); 没有意义。处理完第一个元素后,您将释放整个数组。在循环之后调用 free(person),一旦你完成清理数组的所有元素(假设 person 是用 malloc).

关于c - 在结构中使用带字符串指针的点运算符与箭头运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57826621/

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