如何在将数组传递给函数后知道它的大小

时间:2013-12-26 10:20:14

标签: c arrays pointers sizeof

在将数组传递给函数后,我必须知道数组的大小。例如,

#include<stdio.h>
void func(char *ptr)
{
     printf("%d\n",------); //Here i want the actual size of the array passed to ptr. What to fill in the blank to get total size of the arr[]
}
main()
{
    char arr[10] = "Hello";
    printf("%d\n",sizeof(arr));  // here it is giving 10 bytes that is equal to total size of the array
    func(arr);
}

3 个答案:

答案 0 :(得分:3)

不,你不能,编译器不知道函数的指针指向一个数组,虽然有一些解决方案,我可以说:

1)使用函数参数传递长度:

void func(char *ptr, int length)
{
    printf("%d\n",length);
}

2)如果你的数组总是char类型,你可以放一个NULL char('\ 0')并使用strlen

#include  <stdio.h>
#include <string.h>

void func(char *ptr)
{
    printf("%zu\n",strlen(ptr) + 1); 
}
int main()
{
    char arr[10] = {10,2,11,223,4,45,57,11, 12 ,'\0'};
    printf("%zu\n",sizeof(arr));
    func(arr);
}
// prints 
//10
//10

干杯

答案 1 :(得分:2)

没办法。你也必须传递数组的大小。当您将数组传递给函数时,实际上您将指针传递给它的第一个元素。在这种情况下,函数不知道数组的大小。

答案 2 :(得分:0)

传递给函数时,

Arrays会衰减到pointers。仅使用指针,您无法获得数组的大小。您必须再向调用函数传递一个参数,该函数是数组的size。 例如:

#include <stdio.h>
void fun(int myArray[10])
{
    int i = sizeof(myArray);
    printf("Size of myArray = %d\n", i);
}
int main(void)
{
    // Initialize all elements of myArray to 0
    int myArray[10] = {0}; 
    fun(myArray);
    getch();
    return 0;
}

此处输出为4(取决于平台上指针的大小,可能会有所不同) 这是因为“arrays decays into pointers”编译器假装数组参数被声明为指针,因此打印指针的大小。

因此,您必须将大小作为一个参数传递给调用函数...

#include <stdio.h>
void fun(int myArray[10], int size)
{
    printf("Size of myArray = %d\n", size);
}
int main(void)
{
    // Initialize all elements of myArray to 0
    int myArray[10] = {0}; 
    fun(myArray, sizeof(myArray));
    getchar();            ^----------------Here you are passing the size
    return 0;
}

所以,这里的输出是40 ......