欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c语言整形数组长度_C语言数组传入函数获取数组长度的方法

程序员文章站 2024-02-25 22:05:51
...

在写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 %dn", 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 %dn", numSize);
    return 0;
}


int main() {
    int b[] = {1,2,3,4,5,6,7,8,9,10,11,12};
    int length = sizeof(b)/ sizeof(b[0]);
    arrayLength(b,length);
    return 0;
}

结果:

size of array b[] is 12