相关文章推荐
骑白马的骆驼  ·  typescript 全局变量 - ...·  1 年前    · 
豪气的移动电源  ·  Android ...·  1 年前    · 
喝醉的骆驼  ·  Maven ...·  1 年前    · 

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;