0

我是否正确地说,如果我想更改结构中变量的内容,我必须给出一个指向结构的指针,使用不同的函数来更改结构,如下所示:

结构:

typedef struct data{
    int row;
    int column; 
}data;

struct changer 函数中的 var:

struct data* init_maze(void) {

    data information;      //init information struct
    data *infoPoint;       //int information struct pointer

    int row = 6;
    int column = 10;

    infoPoint->row = row;   //not working but should be updating information
    infoPoint->column = column; //same as above

    return infoPoint;
}

但这并没有按预期工作。代码中断,没有任何反应。谁能解释我做错了什么。

4

4 回答 4

0

另一个答案包括正确使用指针,但对于不同的方法,您可以像简单变量一样传递结构,所以考虑这个版本:

struct data init_maze(void) {

    data information;   
    information.row = 6;   
    information.column = 10;

    return information;
}

这不如传递指针那么有效,但对于大多数实际目的而言,在大多数情况下差异是无关紧要的。这里这个结构的大小是两个整数,这使它完全属于这个类别。

于 2013-02-23T17:51:45.653 回答
0

首先问问自己,你想在这里完成什么。

例如,您声明“数据信息”并且您从不使用它。在你操作它之前,你甚至没有将“infoPoint”指向任何东西。既然你没有写任何“SEGFAULT”,我猜你省略了一些代码?

反正。你想创建一个新的“数据”结构并返回一些初始值吗?然后你必须:A)分配一些内存并返回一个指向堆上这块内存的指针(必须用 malloc(或类似的)分配并在某个时候用 free 释放“

B)您可以将指向结构数据的指针作为参数并将您的值放在那里。

data *init_maza(void) {
   data *infoPoint = malloc(sizeof(struct data));

   data->row = 6;
   data->column = 10;

   return data;
}

void init_maze(data *outp) {
   outp->row = 6;
   data->column = 10;
}

您可以使用指向堆栈或堆上的结构数据的指针调用 B):

数据 foo; 数据 *bar = malloc(sizeof(struct data));

// 初始化 init_maze(&foo); 初始化迷宫(酒吧);

请注意与号“&”,即“地址”运算符。

您还可以使用指向指针参数的指针,这样您仍然可以返回其他内容,例如错误代码。经常使用:

int init_maze(data **d) {
    *data = malloc(sizeof(struct data));
    (*data)->row = 6;
    (*data)->column = 10;

    return 0;
}
于 2013-02-23T17:43:22.710 回答
0

infoPoint 应声明为:

data* infoPoint = malloc (sizeof(data));

那么这段代码应该可以工作:

infoPoint->row = row;   //not working but should be updating information
infoPoint->column = column; //same as above



并且函数 init_maze 不需要结构前缀:

data* init_maze(void) 


data information;  

也未使用

于 2013-02-23T17:32:46.237 回答
0

您的示例代码正在尝试修改指向结构的未初始化指针,因此infoPoint->row = row;是无效操作,因为infoPoint未初始化。

你可以像这样改变你的初始化函数:

void init_maze(data *infoPoint) {
    infoPoint->row = 6;
    infoPoint->column = 10;
}

然后像这样使用它:

int main()
{
    data information;
    init_maze(&information);
}

data information;将在堆栈上分配你的结构,你可以传递一个指向它的指针来init_maze完成它的工作。

于 2013-02-23T17:44:33.340 回答