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

C++ 为什么结构数组的大小在传递给函数时会发生变化?,c++,c,C++,C,为什么结构数组vSdMemoryInfo和abcdSdMemoryInfo的大小不同 将指向结构的指针传递给函数。你得到的是指针的大小,而不是它指向的数据 如果将数组传递给函数,则始终需要将数组中的元素数作为单独的参数传递给函数 < C++ >还有其他选项,比如。或者(或者可选)。将指向结构的指针传递给函数。你得到的是指针的大小,而不是它指向的数据 如果将数组传递给函数,则始终需要将数组中的元素数作为单独的参数传递给函数 < C++ >还有其他选项,比如。或者(或者可选)。您得到的是函数内部指针

为什么结构数组
vSdMemoryInfo
abcdSdMemoryInfo
的大小不同

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

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

< C++ >还有其他选项,比如。或者(或者可选)。

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

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


< C++ >还有其他选项,比如。或者(或者可选)。

您得到的是函数内部指针的大小,而不是结构的大小。要获得结构的实际大小,您可以如下更改函数的原型,并在计算大小时遵循指针

Size of(SdMemoryInfo): 16 4
Size of(SdMemoryInfo): 8 4 
#包括
#包括
类型定义结构
{
浮动总大小;
有效浮动;
}SDM记忆信息;
void SDGetMemoryUsageRespctGUI(SdMemoryInfo(*abcdSdMemoryInfo)[2])
{
printf(“\n大小为(SdMemoryInfo):%d%d”,大小为(*abcdSdMemoryInfo),大小为(float));//大小为abcdSdMemoryInfo
}
int main()
{
//SDGetMemorySageResp MSDGetMemorySageResp;
SdMemoryInfo vSdMemoryInfo[2];
vSdMemoryInfo[0].TotalSize=1;
vSdMemoryInfo[0]。AvailableSize=2;
vSdMemoryInfo[1].TotalSize=3;
vSdMemoryInfo[1]。AvailableSize=4;
printf(“\n大小(SdMemoryInfo):%d%d”,大小(vSdMemoryInfo),大小(float));//vSdMemoryInfo的大小
SDGetMemorySageRespctGUI((SdMemoryInfo(*)[2])vSdMemoryInfo);
printf(“\n大小(int*):%d%d”、大小(int*)、大小(float));//vSdMemoryInfo的大小
}

您得到的是函数内部指针的大小,而不是结构的大小。要获得结构的实际大小,您可以按如下方式更改函数的原型,并在计算大小时遵循指针

Size of(SdMemoryInfo): 16 4
Size of(SdMemoryInfo): 8 4 
#包括
#包括
类型定义结构
{
浮动总大小;
有效浮动;
}SDM记忆信息;
void SDGetMemoryUsageRespctGUI(SdMemoryInfo(*abcdSdMemoryInfo)[2])
{
printf(“\n大小为(SdMemoryInfo):%d%d”,大小为(*abcdSdMemoryInfo),大小为(float));//大小为abcdSdMemoryInfo
}
int main()
{
//SDGetMemorySageResp MSDGetMemorySageResp;
SdMemoryInfo vSdMemoryInfo[2];
vSdMemoryInfo[0].TotalSize=1;
vSdMemoryInfo[0]。AvailableSize=2;
vSdMemoryInfo[1].TotalSize=3;
vSdMemoryInfo[1]。AvailableSize=4;
printf(“\n大小(SdMemoryInfo):%d%d”,大小(vSdMemoryInfo),大小(float));//vSdMemoryInfo的大小
SDGetMemorySageRespctGUI((SdMemoryInfo(*)[2])vSdMemoryInfo);
printf(“\n大小(int*):%d%d”、大小(int*)、大小(float));//vSdMemoryInfo的大小
}
指向指针的数组。由于其类型和维度信息丢失,因此它是结构数组还是任何基本数据类型都无关紧要

#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
}
请注意,
sizeof(pointer)
也可以是4字节,具体取决于系统。

数组到指针。由于其类型和维度信息丢失,因此它是结构数组还是任何基本数据类型都无关紧要

#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
}

< >代码> SIEZOF(指针)< /C>可以根据系统的不同而定为4字节。< /P>这是C还是C++?我可以给出一些关于C++答案的提示,但是我需要知道。删除其他标签。@比尔盖茨-这个案例将是C和C++。@彼得是的,但是答案不同,在语言OP使用时,你不能编译C/C++,语言不存在。可能C。我没有看到任何C++特定的特性。这是C还是C++?我可以给出一些关于C++答案的提示,但是我需要知道。删除其他标签。@比尔盖茨-这个案例将是C和C++。@彼得是的,但是答案不同于语言的使用,你不能编译C/C++,语言不存在。可能C。我没有看到任何C++特定的特性。该信息需要单独传递。可能还需要注意,如果需要数组的大小(或数组中的元素数),则该信息需要单独传递。