我需要在猴子方法中计算传递数组的长度。如何做到这一点,因为输入衰减到猴子方法内的指针......?
int monkey(int input1[])
{
//Write code here
}
约束: 1) 不允许更改函数签名。
int monkey(int input1[], size_t arraySize)
{
}
传递数组的大小是最常用的方法。
或者,您可以执行 C 字符串之类的操作,并在数组末尾添加一个标记值(最大值、0、-1 等)并计算此标记值之前的元素数。
我想不出其他选择。
在一般情况下,您不会。因为它只是一个指针,所以关于数组的信息不可用。
因此,您应该传入一个大小,或者将其包装在一个包含该大小的结构中。
或者因为它是一个 int 数组,所以您可以使用数组中的第一个值作为大小。
或者,根据您的用例,您可以对数组中的数据进行零终止(或明确标记结束)。
在C中没有办法做这样的事情。你的函数的定义
int monkey(int input[])
形式上等价于
int monkey(int *input)
所以你总是需要将数组的长度作为附加参数传递
两种选择:
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
或者,您可以通过不同的通道传递大小/计数,例如,全局变量,如果需要,您可以使用临界区或信号量/锁来保护它。
将数组传递给函数时,可以将长度存储为数组的第一个元素:
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
当你调用它时你可能会忘记通过。所以嗯。
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;
}
诠释猴子(诠释输入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 竞赛的答案