为什么传递给函数时结构数组的大小会发生变化?

Rin*_*tia 0 c c++

#include<stdio.h>
#include<string.h>
typedef struct
{
    float TotalSize;
    float AvailableSize;
}SdMemoryInfo;


void SdGetMemoryUsageRespCsccToGui(SdMemoryInfo *abcdSdMemoryInfo)
{
    printf("\nSize of(SdMemoryInfo): %d %d",sizeof(abcdSdMemoryInfo),sizeof(float)); //Size of abcdSdMemoryInfo
}

int main()
{
    SdGetMemoryUsageResp mSdGetMemoryUsageResp;
    SdMemoryInfo vSdMemoryInfo[2];
    vSdMemoryInfo[0].TotalSize = 1;
    vSdMemoryInfo[0].AvailableSize = 2;
    vSdMemoryInfo[1].TotalSize = 3;
    vSdMemoryInfo[1].AvailableSize = 4;


    printf("\nSize of(SdMemoryInfo): %d %d",sizeof(vSdMemoryInfo),sizeof(float)); //Size of vSdMemoryInfo

    SdGetMemoryUsageRespCsccToGui(vSdMemoryInfo);
}
Run Code Online (Sandbox Code Playgroud)

输出:

Size of(SdMemoryInfo): 16 4
Size of(SdMemoryInfo): 8 4 
Run Code Online (Sandbox Code Playgroud)

为什么是结构数组的大小vSdMemoryInfoabcdSdMemoryInfo不同?

Som*_*ude 5

您将指向结构的指针传递给函数.你得到指针的大小而不是它指向的数据.

如果将数组传递给函数,则始终需要将数组中的元素数作为单独的参数传递给函数.

使用C++还有其他选项,比如"数组大小"模板.或std::array(或可选std::vector).