我需要计算猴子方法中传递数组的长度。怎么这样做,因为输入衰减到猴子方法中的指针......?
int monkey(int input1[])
{
//Write code here
}
约束: 1)您不能更改功能签名。
答案 0 :(得分:9)
int monkey(int input1[], size_t arraySize)
{
}
传递数组的大小是最常用的方法。
或者您可以执行类似C字符串的操作,并在数组的末尾添加 sentinel值(最大值,0,-1等)并计算此前哨之前的元素数量值。
我无法想到其他替代方案。
答案 1 :(得分:5)
在一般情况下,你没有。由于它只是一个指针,因此无法获得有关该数组的信息。
因此,您应传入一个大小,或将其包装在包含大小的结构中。
或者因为它是一个int数组,你可以使用数组中的第一个值作为大小。
或者,根据您的用例,您可以对数组中的数据进行零终止(或者明确标记结束)。
答案 2 :(得分:4)
没有办法在C中做这样的事情。函数的定义
int monkey(int input[])
正式等同于
int monkey(int *input)
所以你总是需要传递数组的长度作为附加参数
答案 3 :(得分: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
或者,您可以通过不同的通道传递大小/计数,例如,一个全局变量,如果需要,您可以使用临界区或信号量/锁来保护它。
答案 4 :(得分: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开始而不是从0开始的错误。但是这意味着当你调用它时你可能忘记传递array + 1
。好吧。
答案 5 :(得分: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;
}
答案 6 :(得分:-1)
int monkey(int input1 []) {
//Write code here
}
int len = sizeof(input1)/ sizeof(input1 [0]); 要么 int len = sizeof(input1)/ sizeof(int);
错了.. IT将始终给出2..as input1是一个长指针,因此大小为8,而sizeof(int)是4 ..
如果你想找到长度有两种方式...... 1)通过长度... (我猜你不能) 2)如果你有想法..关于input1数组...说(TECH GIG竞赛) 试着找出数组未定义部分中包含的数字.. 在这里说我发现样品.. {1,2,3,4,5} =&gt; input1 [6] =&gt;包含数字-9999
所以只是写了一个while循环来找到长度
而(输入1 [长度]!= - 9999) LEN ++;
找出答案 input1 [6] =&gt;包含数字-9999
我在答案中使用 return input1 [6] ..检查 -9999就是答案
我刚刚提交了TECH GIG竞赛的答案