gpt4 book ai didi

c - 在结构中声明 int 数组

转载 作者:太空狗 更新时间:2023-10-29 16:31:30 26 4
gpt4 key购买 nike

在 C 中,我已经定义了如下所示的 struct,并希望将其内联初始化。结构中的字段和数组 foos 都不会在初始化后发生变化。第一个 block 中的代码工作正常。

struct Foo {
int bar;
int *some_array;
};

typedef struct Foo Foo;

int tmp[] = {11, 22, 33};
struct Foo foos[] = { {123, tmp} };

但是,我并不真的需要 tmp 字段。事实上,它只会让我的代码变得困惑(这个例子有些简化)。因此,我想在 foos 的声明中声明 some_array 的值。不过,我无法获得正确的语法。也许字段 some_array 应该有不同的定义?

int tmp[] = {11, 22, 33};
struct Foo foos[] = {
{123, tmp}, // works
{222, {11, 22, 33}}, // doesn't compile
{222, new int[]{11, 22, 33}}, // doesn't compile
{222, (int*){11, 22, 33}}, // doesn't compile
{222, (int[]){11, 22, 33}}, // compiles, wrong values in array
};

最佳答案

首先有2种方式:

  • 你知道数组的大小
  • 你不知道那个尺寸。

第一种情况是静态编程问题,并不复杂:

#define Array_Size 3

struct Foo {
int bar;
int some_array[Array_Size];
};

您可以使用此语法来填充数组:

struct Foo foo;
foo.some_array[0] = 12;
foo.some_array[1] = 23;
foo.some_array[2] = 46;

当你不知道数组的大小时,这是一个动态规划问题。你得问尺寸。

struct Foo {

int bar;
int array_size;
int* some_array;
};


struct Foo foo;
printf("What's the array's size? ");
scanf("%d", &foo.array_size);
//then you have to allocate memory for that, using <stdlib.h>

foo.some_array = (int*)malloc(sizeof(int) * foo.array_size);
//now you can fill the array with the same syntax as before.
//when you no longer need to use the array you have to free the
//allocated memory block.

free( foo.some_array );
foo.some_array = 0; //optional

其次,typedef 很有用,所以当你这样写的时候:

typedef struct Foo {
...
} Foo;

这意味着您将“struct Foo”替换为:“Foo”。所以语法是这样的:

Foo foo;   //instead of "struct Foo foo;

干杯。

关于c - 在结构中声明 int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17250480/

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