gpt4 book ai didi

c - 在 C 中取消引用结构的字段

转载 作者:行者123 更新时间:2023-12-02 08:37:43 24 4
gpt4 key购买 nike

我有:

typedef struct table {

int size;

} Table;

所以我有一个方法的参数:

Table **table

但是当我这样做的时候:

table->size = 5;

或者:

*table->size = 5;

它不起作用,我的标志给我错误:请求成员“size”不是结构或 union

请帮忙。

最佳答案

为了避免所有奇怪的间接寻址,使用局部变量更容易:

void myfunc(Table ** my_table) {
Table * ptable = *my_table;
ptable->size = 5;

/* etc */
}

但正如其他人指出的那样,(*table)->size = 5 等会做同样的事情。

如果您需要修改指向的内容,则:

void myfunc(Table ** my_table) {
Table * ptable = malloc(sizeof(*ptable));

/* Do stuff with new table, then update argument */

*my_table = ptable;
}

这是后者的一个例子:

#include <stdio.h>
#include <stdlib.h>

typedef struct table {
int size;
} Table;

int create_table(Table ** table, int size) {
Table * new_table = malloc(sizeof(*new_table));
if ( new_table == NULL ) {
return -1;
}

new_table->size = size;

*table = new_table;
return 0;
}

int main(void) {
Table * my_table;

if ( create_table(&my_table, 5) == -1 ) {
fprintf(stderr, "Couldn't allocate memory for new table.\n");
return EXIT_FAILURE;
}

printf("New table size is %d\n", my_table->size);

free(my_table);

return 0;
}

当然,您可以只让 create_table()Table * 返回到新创建的表,但在您的情况下,该函数已声明为返回 int。可能出于多种原因,但在上面我只是假设它会返回一个错误代码。正如我们所知,C 中的一个函数只能返回一个值,所以如果它返回一个 int,它就不能返回一个 Table *,所以唯一的方法是get that new pointer 是修改一个参数,如果你想修改一个Table *,你必须传递那个Table *的地址,所以你的函数必须接受一个表**

关于c - 在 C 中取消引用结构的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19613643/

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