如何在c中找到作为参数传递的整数数组的长度?

时间:2013-01-20 08:15:28

标签: c arrays

我需要计算猴子方法中传递数组的长度。怎么这样做,因为输入衰减到猴子方法中的指针......?

int monkey(int input1[])
{

    //Write code here
}

约束: 1)您不能更改功能签名。

7 个答案:

答案 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竞赛的答案