Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 相同的表达式,但在函数中使用时返回值不同_C_Arrays - Fatal编程技术网

C 相同的表达式,但在函数中使用时返回值不同

C 相同的表达式,但在函数中使用时返回值不同,c,arrays,C,Arrays,我正在编写一个返回ints数组大小的函数。逻辑是:sizeof(arr)/sizeof(int)如果我将其保存到变量中,效果很好,但是如果我将其返回到函数中,对于大小为10字节的数组,我会得到1。为什么?这是我的密码: int b[10]; int t1= sizeof (b) / sizeof (int); size_t t2 = lenof(b); printf("t1 = %d, t2 = %d\n", t1, t2); size_t lenof (int arr[]) { retur

我正在编写一个返回ints数组大小的函数。逻辑是:
sizeof(arr)/sizeof(int)
如果我将其保存到变量中,效果很好,但是如果我将其返回到函数中,对于大小为10字节的数组,我会得到
1
。为什么?这是我的密码:

int b[10];
int t1=  sizeof (b) / sizeof (int);
size_t t2 = lenof(b);
printf("t1 = %d, t2 = %d\n", t1, t2);

size_t lenof (int arr[]) { return sizeof (arr) / sizeof (int); }
上面的C代码打印:

t1 = 10, t2 = 1

有人能给我解释一下吗?也许我应该用指针来做?谢谢。

场景1:

 int t1=  sizeof (b) / sizeof (int); 
在这种情况下,
sizeof(b)
返回数组的大小,该大小除以
int
的大小可以正确地生成数组元素的数量

场景2:
将数组传递给函数时,它会作为指向数组中第一个元素的指针衰减。因此

lenof(int arr[]) 
实际上相当于:

lenof(int *arr) 
鉴于此,
sizeof(arr)
生成系统上指针的大小&该大小似乎与系统上
int
的大小相同,因此除法和函数返回
1


C不提供数组的边界检查,因此,如果您编写的内容超出数组边界,将永远不会收到警告。这本质上意味着当使用数组时,您必须自己跟踪数组中存在多少元素

如果需要函数中数组的大小,最简单的解决方案是将数组的大小作为单独的参数传递

lenof(int arr[], int len); 

你应该使用指针。作为一个参数,'int ATT[]是真的int,大小与sieof(int)相同。我认为 tx[]/Cord>参数语法混淆了更多的初学者,而不是C++的任何其他特性。在过去的5分钟里,我们对此有两个问题。@SethCarnegie:事实上,它很可能是
c++-Faq
c++lounge Faq
的理想人选。