Arrays 为什么我的函数无法找到数组的大小?
我创建了名为functions.h的头文件和名为test.c的源文件。 我想通过执行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;
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
是否为实际数组:请不要发布文本的屏幕截图。可能存在重复(特别是该答案)。应该有一大堆精确的重复。。。