2

我需要在猴子方法中计算传递数组的长度。如何做到这一点,因为输入衰减到猴子方法内的指针......?

int monkey(int input1[])
{

    //Write code here
}

约束: 1) 不允许更改函数签名。

4

7 回答 7

9
int monkey(int input1[], size_t arraySize)
{

}

传递数组的大小是最常用的方法。

或者,您可以执行 C 字符串之类的操作,并在数组末尾添加一个标记值(最大值、0、-1 等)并计算此标记值之前的元素数。

我想不出其他选择。

于 2013-01-20T08:18:21.980 回答
5

在一般情况下,您不会。因为它只是一个指针,所以关于数组的信息不可用。

因此,您应该传入一个大小,或者将其包装在一个包含该大小的结构中。

或者因为它是一个 int 数组,所以您可以使用数组中的第一个值作为大小。

或者,根据您的用例,您可以对数组中的数据进行零终止(或明确标记结束)。

于 2013-01-20T08:20:30.677 回答
4

在C中没有办法做这样的事情。你的函数的定义

int monkey(int input[])

形式上等价于

int monkey(int *input)

所以你总是需要将数组的长度作为附加参数传递

于 2013-01-20T08:21:40.723 回答
1

两种选择:

int array[10+1];
array[0] = 10;
// fill in the rest in array[1...10]
monkey(array);
// monkey() checks input1[0] to see how many data elements there are

int array[10+1];
array[0] = 10;
// fill in the rest in array[1...10]
monkey(array + 1);
// monkey() checks input1[-1] to see how many data elements there are

或者,您可以通过不同的通道传递大小/计数,例如,全局变量,如果需要,您可以使用临界区或信号量/锁来保护它。

于 2013-01-20T08:24:20.110 回答
1

将数组传递给函数时,可以将长度存储为数组的第一个元素:

int monkey(int input1[])
{
    int len = input1[0];
    for (int i = 1; i < len; ++i) {
        // do something with the array
    }
}

//...

int array[20];
array[0] = 20;
monkey(array);

另一种方法是使用指针算法来代替,以便函数可以将数组视为从 0 开始:

int monkey(int input1[])
{
    int len = *(input1 - 1);
    for (int i = 0; i < len; ++i) {
        // do something with the array
    }
}

//...

int array[20];
array[0] = 19;
monkey(array + 1);

但这真的是一回事。唯一的好处是防止出现从 0 而不是 1 开始的错误。但这意味着array + 1当你调用它时你可能会忘记通过。所以嗯。

于 2013-01-20T08:24:31.963 回答
0
int main()
{
    int arr[] = { 62,34,4,4,4,3,2,-1 };

    monkey(arr);
    return 0;
}


int monkey(int input1[])
{
    int n = 0;

    while (a[n] != -1)
    {
        n++;
    }

    printf_s("Length of input1[] is: %d", n);

    return n;
}
于 2019-05-22T18:34:45.217 回答
-1

诠释猴子(诠释输入1 []){

//Write code here

}

int len = sizeof(input1)/sizeof(input1[0]); 或 int len = sizeof(input1)/sizeof(int);

是错误的.. 它总是会给出 2.. 因为 input1 是一个长指针,所以 size 是 8,sizeof(int) 是 4..

如果你想找到长度,有两种方法...... 1)传递长度......(我想你不能)2)如果你有想法......关于 input1 数组......说(TECH GIG竞赛)试试找出数组的未定义部分中包含的数字.. 在这里说我找到了样本.. {1,2,3,4,5} => input1[6] => 包含数字 -9999

所以只写了一个while循环来查找长度

而(输入1[len]!=-9999)len++;

找出 input1[6] => 包含数字 -9999

我在答案中使用 return input1[6]..来检查 -9999 是否是答案

我刚刚提交了 TECH GIG 竞赛的答案

于 2013-12-04T14:23:15.910 回答