Arrays 为什么我的函数无法找到数组的大小?

Arrays 为什么我的函数无法找到数组的大小?,arrays,c,size,Arrays,C,Size,我创建了名为functions.h的头文件和名为test.c的源文件。 我想通过执行size=sizeof(arr)/arr[0]来计算数组的大小 如果我在main函数中执行此操作,则表达式可以工作。但是,当我应用头文件时,它不会 对于头文件:functions.h #ifndef C2A1E1_MACROS_H_INCLUDED #define C2A1E1_MACROS_H_INCLUDED double SizeofArray(double a[]) { int b = 0;

我创建了名为functions.h的头文件和名为test.c的源文件。 我想通过执行
size=sizeof(arr)/arr[0]
来计算数组的大小

如果我在
main
函数中执行此操作,则表达式可以工作。但是,当我应用头文件时,它不会

对于头文件:functions.h

#ifndef C2A1E1_MACROS_H_INCLUDED
#define C2A1E1_MACROS_H_INCLUDED

double SizeofArray(double a[]) {
    int b = 0;
    b = sizeof(a) / sizeof(a[0]);

    return b;
}
#endif // C2A1E1_MACROS_H_INCLUDED
对于源文件:test.c

#include <stdio.h>
#include "functions.h"

int main(void) {
    double arr[] = { 1, 2, 3, 4, 5 };
    double arrSize = 0;

    double n1 = sizeof(arr);
    printf("n1= %f\n", n1);
    double n2 = sizeof(arr[0]);
    printf("n2= %f\n", n2);
    double ArrSize = n1 / n2;
    printf("ArrSize= %f\n", ArrSize);

    //Applied Function
    arrSize = SizeofArray(arr);
    printf("Array Size= %f\n", arrSize);

    return 0;
}
#包括
#包括“functions.h”
内部主(空){
双arr[]={1,2,3,4,5};
双arrSize=0;
双n1=sizeof(arr);
printf(“n1=%f\n”,n1);
双n2=sizeof(arr[0]);
printf(“n2=%f\n”,n2);
双棱尺寸=n1/n2;
printf(“ArrSize=%f\n”,ArrSize);
//应用函数
arrSize=SizeofArray(arr);
printf(“数组大小=%f\n”,arrSize);
返回0;
}
这是在数组大小为0的情况下运行程序时的结果,但它应该是5:
SizeofArray
无法作为函数实现,因为该函数接收到指向数组的指针,它无法从该指针使用已发布的表达式计算数组的长度

您可以为此目的定义宏,但请记住,它很容易出错,因为使用指针而不是实际数组调用宏时,宏也会失败:

#define SizeofArray(a)  (sizeof(a) / sizeof(*(a)))

此页面有一些可移植的方法来尝试检测
a
是否为实际数组:

请不要发布文本的屏幕截图。可能存在重复(特别是该答案)。应该有一大堆精确的重复。。。