我来自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]
吗?
答案 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