#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);
}
输出:
Size of(SdMemoryInfo): 16 4
Size of(SdMemoryInfo): 8 4
为什么结构数组vSdMemoryInfo
和abcdSdMemoryInfo
的大小不同?
答案 0 :(得分:5)
将指针传递给函数的结构。并且你得到指针的大小而不是它指向的数据。
如果将数组传递给函数,则总是需要将数组中的元素数作为单独的参数传递给函数。
使用C ++还有其他选择,例如"size of array" templates。或std::array
(或可选std::vector
)。
答案 1 :(得分:0)
你正在获取函数内部指针的大小而不是结构的大小。要获得结构的实际大小,可以按如下方式更改函数的原型,并在计算大小时使用指针。
#include<stdio.h>
#include<string.h>
typedef struct
{
float TotalSize;
float AvailableSize;
}SdMemoryInfo;
void SdGetMemoryUsageRespCsccToGui(SdMemoryInfo (*abcdSdMemoryInfo)[2])
{
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((SdMemoryInfo(*)[2])vSdMemoryInfo);
printf("\nSize of(int *): %d %d",sizeof(int *),sizeof(float)); //Size of vSdMemoryInfo
}
答案 2 :(得分:0)
将数组decays指向指针。由于它的类型和维度信息丢失,它是一个struct数组还是任何原始数据类型都是无关紧要的。
Size of(SdMemoryInfo): 16 (= (sizeof(vSdMemoryInfo[0] * len) = 8*2) 4
Size of(SdMemoryInfo): 8 (= sizeof(pointer)) 4
请注意,sizeof(pointer)
也可以是4个字节,具体取决于系统。