【问题标题】:How to allocate memory and dereference an array of arrays within a struct?如何分配内存并取消引用结构中的数组数组?
【发布时间】:2017-09-24 03:26:26
【问题描述】:

我想知道如何访问结构内的双指针,例如:

typedef struct Example {
   char **set;
   int size;
 }Example;

结构体在函数内部被调用为:

struct Example exmpl;

如果我需要在该数组数组中创建一个新数组,我将如何在函数/main 中调用它? 还是和普通的一样,exmpl->set

【问题讨论】:

  • 对,我也要分配!
  • 你的结构中没有“数组数组”!指针不是数组(反之亦然)。
  • 先尝试为char *set; 成员发布代码,然后询问char **set;

标签: c arrays pointers struct


【解决方案1】:

set 的类型无关紧要,您可以使用exmpl.set 访问它。如果您需要访问单个元素,例如 exmpl.set[0][0]

如果你需要为其分配内存,你需要为外部数组分配内存,然后为每个内部数组独立分配内存,像这样创建一个 10x20 的数组:

struct Example exmpl;
exmpl.set = malloc(10 * sizeof(char*));       // 10 "arrays" in the set
for (int i = 0; i < 10; i++)
    exmpl.set[i] = malloc(20 * sizeof(char)); // 20 chars within each "array"

然后设置每个元素的值:

for (int i = 0; i < 10; i++)
    for (int j = 0; j < 20; j++)
        exmpl.set[i][j] = calculate(i, j);

而且,数组和指针是不同的,所以这里有一个指向 char 指针的指针(其工作方式类似于 char 的二维数组)

【讨论】:

  • 别忘了设置exmpl.size = 10;
  • 感谢您为我指明正确的方向!即使是字符串数组,我还需要使用 for 循环吗?
  • 创建:这取决于你如何构造你的字符串,记住它们需要存在于内存中的某个地方,你是如何构造它们的? 对于设置每个元素的值: 您仍然需要最外层的循环,但不需要最内层的循环,因为您可以使用像 strcpy 这样的东西来逐字符复制您(或者如果字符串位于内存中的其他位置,您可以复制指针)。
猜你喜欢
  • 2018-02-06
  • 2020-02-03
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 2021-05-29
相关资源
最近更新 更多