从结构指针复制到C中数据库的结构指针

标签 c pointers data-structures struct

我创建了以下结构:

typedef struct {
  char name[15];
  int ID;
} Employee;

typedef Employee Item;

typedef struct {
  Item items[5];
  int size;
} List;

我正在使用这个函数调用来查看列表中存储的内容:

void Peek (int position, List *L, Item *X);

该函数应该在列表 [L] 中的 [position] 处获取项目并将其地址复制到 [X]。我有这样的窥视功能:

void Peek (int position, List *L, Item *X) {
  Item *B;
  B = malloc(sizeof(L->items[position]));
  X = B;
}

这会将 X 分配给与 B 相同的位置,但我认为这会导致内存泄漏,更重要的是,如果我尝试从这个函数中调用主项目 X 的​​ ID:

int EmployeeID (Employee X) {
  return(X.ID);
}

我返回 32665 或类似的东西。从 L 到 X 获取数据的另一种方法是什么?

最佳答案

X和B都是指针

X = B是指针赋值,不是结构体赋值

X 是按值传递的参数,在函数内部为 X 赋值对函数外部 X 的值的影响为零。

试试这个(不是解决方案,而是朝着正确方向迈出的一步):

void Peek (int position, List *L, Item **X)
{
  Item *B;
  B = malloc(sizeof(L->items[position]));
  *X = B;
}

但是L->items[position]的值还是没有赋值到X空间。

选项 2:

void Peek(int position, List *L, Item *X)
{
  *X = L->items[position];
}

这假设 X 已经指向一个 malloc 的内存块。如果不是,选项 3

选项 3:

void Peek (int position, List *L, Item **X)
{
  Item *B;
  B = malloc(sizeof(L->items[position]));
  *X = B;
  *B = L->items[position];
}

关于从结构指针复制到C中数据库的结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18988327/

相关文章:

作为类方法的参数传递的函数的 c++ std::vector

c - 交换链表中的节点

javascript - 二维坐标网格 JavaScript 的 O(1) 复杂度搜索数据结构

c# - 特殊类型查询的数据结构

c - 使用 Eclipse 在 C 中将参数传递给 main

c - 使用结构更新指针执行 realloc 时出现问题

C 查找替换不起作用

c - 我想将一个数组从我的主要方法传递到我的函数(min),以便可以在函数(min)中计算最小值

java - 在 Java 中指向整数的指针

c - 您更喜欢&cycle->read_events[i] 和cycle->read_events+i 之间的关系