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++特定的特性。该信息需要单独传递。可能还需要注意,如果需要数组的大小(或数组中的元素数),则该信息需要单独传递。