C 中没有 sizeof 且不在 main 函数中的数组大小

size of array in C without sizeof and not in main function

我想了解如何在不使用 sizeof 而不是在 main 函数中知道数组的大小。 我真的很想了解为什么当我在其他函数中执行代码时我的代码不起作用。(主要是它与 sizeof 相同)。 >>> 我得到的结果是一些垃圾数字

*可以理解使用 char 数组,但我不知道如何使用其他数据说明符。

#include <stdio.h>

void arrSize(int a[],int b[]){
    int size_a = *(&a+1) - a;
    int size_b = *(&b+1) - b;
    printf("%d,%d",size_a,size_b);
}

int main(){
    int arr[] = {2,12,14,16};
    int brr[] = {8,53,2,4,16};
    
    arrSize(arr,brr);

    return 0;
}

这个函数声明

void arrSize(int a[],int b[]){
    int size_a = *(&a+1) - a;
    int size_b = *(&b+1) - b;
    printf("%d,%d",size_a,size_b);
}

被编译器调整为如下声明

void arrSize(int *a,int *b){
    int size_a = *(&a+1) - a;
    int size_b = *(&b+1) - b;
    printf("%d,%d",size_a,size_b);
}

也就是说,具有数组类型的参数由编译器调整为指向数组元素类型的指针。

另一方面,在这次通话中

arrSize(arr,brr);

数组被隐式转换为指向其第一个元素的指针。

拥有指向数组第一个元素的指针,您无法确定指针指向的数组大小。

这些声明中的初始值设定项

    int size_a = *(&a+1) - a;
    int size_b = *(&b+1) - b;

调用未定义的行为,因为您取消引用未指向有效对象的指针。