Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当数组从main传递到另一个函数时,如何查找整数数组长度?_C - Fatal编程技术网

C 当数组从main传递到另一个函数时,如何查找整数数组长度?

C 当数组从main传递到另一个函数时,如何查找整数数组长度?,c,C,如何从用户定义的函数中获取arrayLength int getArrayLength(int *arr){ //our logic return result; } 简单地说:你不能。您应该将其作为另一个参数传递: int getArrayLength(int *arr, int size){ ... 如果您尝试使用sizeof,它将返回指针的大小。您还可以使用特殊值来指示数组的最后一个元素(如0表示字符串),但添加约定会使事情变得更复杂。简单地说:您不能。您应该将其作为另一个

如何从用户定义的函数中获取arrayLength

int getArrayLength(int *arr){
   //our logic
   return result;
}

简单地说:你不能。您应该将其作为另一个参数传递:

int getArrayLength(int *arr, int size){ ...

如果您尝试使用sizeof,它将返回指针的大小。您还可以使用特殊值来指示数组的最后一个元素(如0表示字符串),但添加约定会使事情变得更复杂。

简单地说:您不能。您应该将其作为另一个参数传递:

int getArrayLength(int *arr, int size){ ...

如果您尝试使用sizeof,它将返回指针的大小。您也可以使用特殊值来指示数组的最后一个元素(如0表示字符串),但添加约定会使事情变得更复杂。

也将数组长度传递给函数,否则您无法传递。这是因为
sizeof(arr)
将给出指向
int
的指针的大小,而不是整个数组的大小

也将数组长度传递给函数,否则无法传递。这是因为
sizeof(arr)
将给出指向
int
的指针的大小,而不是整个数组的大小

您需要做以下两件事之一:

  • 让调用者提供长度,或者

  • 商定一个sentinel值,用于检测数组的结尾

  • 在一般情况下,正确的答案是选项1。您不应该在不使用长度参数的情况下编写使用C数组的函数


    在某些特定情况下,选项2工作得相当好。例如,
    \0
    用于标记字符串的结尾,这些字符串只是字符数组。如果
    0
    不是数组元素的有效值,则这可能适用于字符串以外的情况。但一般来说,选择选项1。

    您需要做两件事之一:

  • 让调用者提供长度,或者

  • 商定一个sentinel值,用于检测数组的结尾

  • 在一般情况下,正确的答案是选项1。您不应该在不使用长度参数的情况下编写使用C数组的函数


    在某些特定情况下,选项2工作得相当好。例如,
    \0
    用于标记字符串的结尾,这些字符串只是字符数组。如果
    0
    不是数组元素的有效值,则这可能适用于字符串以外的情况。但是,一般来说,使用选项1。

    一种可以确定长度的方法是将最后一个元素设置为0的定界符值,或者将大小与ARR一起传递。但是,第一个方法是不推荐的。这可能是考虑切换到更高级别的语言投票的时候,因为问题是复制是多余的。特别是当1)OP是SO的新成员时。2) 这个问题问得很清楚,也很简洁。确定长度的一种方法是将最后一个元素设置为类似于0的分隔符值,或者在第一个方法是不推荐的。这可能是考虑切换到更高级别的语言投票的时候,因为一个问题是重复过度,特别是当1)OP是新的。2) 这个问题被清楚简洁地提出。提出的概念与其他答案相似,但比其他答案有所改进,并且陈述得很好,有很好的支持理由。像这样,您验证了sentinel值的使用+1提出的概念与其他答案相似,但比其他答案有所改进,陈述充分,有充分的支持理由。像这样,您验证了sentinel值的使用+1.