我有一个场景,我想区分这两种类型。 很容易用python,C ++,java等其他语言编写它。但它是 很难C.也许我不擅长基础知识。我不知道如何实现这一目标。
让我们说:[1,2,3,[34,45],45]。内部数组作为其他数组中的元素存在。我怎样才能告诉他们数组中的普通元素。
我认为这很有趣,所以我可以更多地了解C的属性。
答案 0 :(得分:5)
答案很简单:你的数组在C语言中是不可能的。与Python和其他高级语言不同,C有一种相当低级的金属方法:所有数组元素必须具有相同的类型,否则你的程序不打算编译。
为了使可能与其他数组混合的int
数组,您需要执行以下操作:
union
和int
int*
union
放在struct
内,并附上区分int
和数组的标志struct
的数组这是一个简短的例子:
enum val_type {
num
, array
};
struct vect {
int *arr;
size_t size;
};
struct mix {
union {
int val;
struct vect vect;
} v;
enum val_type type;
};
int arr1[] = {4, 5};
struct mix data[] = {
{.v = {.val = 1}, .type = num}
, {.v = {.val = 2}, .type = num}
, {.v = {.val = 3}, .type = num}
, {.v = {.vect = {.arr = arr1, .size = 2}}, .type = array}
, {.v = {.val = 6}, .type = num}
};
是的,您需要将所有这些内容用于某些其他语言中可以表示为[1,2,3,[34,45],45]
的内容。作为对所有这些代码的回报,您获得的程序效率远远高于使用高级语言编写的程序。
答案 1 :(得分:-1)
您提到的其他语言是面向对象的,而C则不是。 C只能操作相同类型对象的数组。为了能够将多个类型作为元素,您必须创建一个可以容纳其中的联合类型。
Box<Entity<Renderer=???>>