繁体   English   中英

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

[英]What is the `.arr` function in this piece of code?

我来自 Python,但我在 C 语言的 Codefights 中看到了这段代码,但我无法通过谷歌找到.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]吗?

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

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

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

它不是方法,C 中没有这样的东西。它是结构成员

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

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

或者

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

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

我同意上面的@Derlin。 这是一段用于打印元素的代码

arr_arr_integer rotateImage(arr_arr_integer a) {
    int i=0, j=0;

    for(i=0; i<a.size;i++){
        for(j=0; j<a.size;j++){
            printf("i=%d, j=%d, %d\n",i,j,a.arr[i].arr[j]);
        }
    }
}

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

typedef struct {
    int size;
    int arr[];
} arr_integer;

typedef struct {
    int size;
    arr_integer arr[];  
} arr_arr_integer;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM