C语言数组传入函数获取数组长度的方法
在写C语言函数时,我们总想去把数组传入函数中( 例如:int function(int a[]) ),并得到其长度,事实上,本人经过多方面努力验证,发现在函数内获取其长度做不到的,当我们传入一个数组时,根据C语言规定,实际传入的形参是我们传入数组的指针。
举个例子,如果主函数中有一个数组b[10],我们实际传入到函数function里的是 int *a = b ; 也就是说,我们传入到函数中的a是数组b的 首地址 。当我们使用sizeof(a)时,得到的也只是指针的大小,而并非数组的大小。不同于字符串以\0结尾,数字数组的末端通过指针是无法找到的。
然而在主函数中,数组的长度是可以获取的,使用
int length = sizeof(b)/sizeof(b[0]);
获取其长度,在函数中加入新的形参int NumSize输入length作为其长度:
int function(int a[], int NumSize)
这样便可以将数组长度输入到函数中去了。
函数中指针实例:
#include <stdio.h>
int arrayLength(int a[])
printf("size of array b[] is %d\n", sizeof(a)/sizeof(a[0]);
return 0;
int main() {
int b[] = {1,2,3,4,5,6,7,8,9,10,11,12};
arrayLength(b);
return 0;
}
输出结果为:
size of array b[] is 2
(电脑系统64位,指针长度为8)
由此可见无法获取
正确的获取方式:
#include <stdio.h>
int arrayLength(int a[], int numSize)
printf("size of array b[] is %d\n", numSize);
return 0;