如何在C中区分int与int指针?

时间:2017-03-29 02:21:09

标签: c

我有一个场景,我想区分这两种类型。 很容易用python,C ++,java等其他语言编写它。但它是 很难C.也许我不擅长基础知识。我不知道如何实现这一目标。

让我们说:[1,2,3,[34,45],45]。内部数组作为其他数组中的元素存在。我怎样才能告诉他们数组中的普通元素。

我认为这很有趣,所以我可以更多地了解C的属性。

2 个答案:

答案 0 :(得分:5)

答案很简单:你的数组在C语言中是不可能的。与Python和其他高级语言不同,C有一种相当低级的金属方法:所有数组元素必须具有相同的类型,否则你的程序不打算编译。

为了使可能与其他数组混合的int数组,您需要执行以下操作:

  • 制作混合unionint
  • 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=???>>