这段代码中的.arr函数是什么?

时间:2018-07-27 07:59:54

标签: c

我来自Python,但是我在Codefights中已经看到了C语言的这段代码,而我在Google上找不到.arr的含义。我也看不到代码中有任何变量:

// Definition for arrays:
// typedef struct arr_##name {
//   int size;
//   type *arr;
// } arr_##name;
//
// arr_##name alloc_arr_##name(int len) {
//   arr_##name a = {len, len > 0 ? malloc(sizeof(type) * len) : NULL};
//   return a;
// }
//
//

int firstDuplicate(arr_integer a) {
    int i = 0;
    int val = 0;
    for(i = 0; i < a.size; i++) {
        val = a.arr[i];
        if(val < 0) {
            val = -1*val;
        }
        if(a.arr[val-1] < 0) {
            return val;
        } else {
            a.arr[val-1] = a.arr[val-1]*-1;
        }
    }
    return -1;
}

a.arr[i]是同一as a[i]吗?

3 个答案:

答案 0 :(得分:2)

如果我没记错的话,在CodeFights中,您将使用定义为以下内容的包装器:

// Definition for arrays:
typedef struct arr_##name {
   int size;
   type *arr;
} arr_##name;

因此,arr_integer不是一个数组,而是一个保存有一个int数组的struct。要访问其元素,您需要.arr

答案 1 :(得分:1)

这不是方法,C语言中没有这样的东西。它是structure member

我的猜测是,在您的代码示例之前,arr_integer的定义为:

typedef struct {
    int *arr;
    // Other members
} arr_integer;

typedef struct {
    // Other members
    int arr[];
} arr_integer;

其他成员可能是数组的大小和容量。

答案 2 :(得分:0)

我同意上面的@Derlin。 这是一段代码,可以打印出您的元素

StreamInterface::__toString

就像指出的那样,结构定义看起来像这样:

StreamInterface::read
相关问题