定义一个结构体类型s[MaxSiZe]的有关问题
定义一个结构体类型s[MaxSiZe]的问题
#define MaxSize 10
typedef struct
{
int i;
int j;
int di;
}S[MaxSize];
int main()
{
printf("%d\n",sizeof(S[MaxSize]));
}
这里定义了一个数据类型s[MaxSize],我试了一下:
当定义MaxSize等于1时 输出12
当定义MaxSize等于10时 输出1200
当定义MaxSize等于100时 输出120000
现请教各位高手:
1. 该数据类型(S[MaxSize])在计算机里存储空间是怎么分配的?
2. 怎样给该数据类型中的变量赋值和调用该数据类型中的变量?
谢谢赐教
------解决方案--------------------
这里要先弄清楚S是什么?S是一个结构体数组,数组有MaxSize个结构体,每个结构体中有3个int型变量
分析好S后,我们来看S在内存中是怎么分配的,由于没有编译指令的作用,编译器自动按照对齐方式,给
这个结构体分配了12个字节(3*sizeof(int)),所以S占用了12*MaxSize个字节
对于结构体变量占用内存的大小,这是要根据编译指令,有时候甚至在不同的CPU下占用的字节都是不同的
在这里
当定义MaxSize等于1时 输出12
当定义MaxSize等于10时 输出1200
当定义MaxSize等于100时 输出120000
对数据变量赋值和调用就和普通变量一样,
如
在MaxSize = 2时
S tmp = {{1,1,1},{1,1,1}};
------解决方案--------------------
还是看代码吧
#define MaxSize 10
typedef struct
{
int i;
int j;
int di;
}S[MaxSize];
int main()
{
printf("%d\n",sizeof(S[MaxSize]));
}
这里定义了一个数据类型s[MaxSize],我试了一下:
当定义MaxSize等于1时 输出12
当定义MaxSize等于10时 输出1200
当定义MaxSize等于100时 输出120000
现请教各位高手:
1. 该数据类型(S[MaxSize])在计算机里存储空间是怎么分配的?
2. 怎样给该数据类型中的变量赋值和调用该数据类型中的变量?
谢谢赐教
------解决方案--------------------
这里要先弄清楚S是什么?S是一个结构体数组,数组有MaxSize个结构体,每个结构体中有3个int型变量
分析好S后,我们来看S在内存中是怎么分配的,由于没有编译指令的作用,编译器自动按照对齐方式,给
这个结构体分配了12个字节(3*sizeof(int)),所以S占用了12*MaxSize个字节
对于结构体变量占用内存的大小,这是要根据编译指令,有时候甚至在不同的CPU下占用的字节都是不同的
在这里
当定义MaxSize等于1时 输出12
当定义MaxSize等于10时 输出1200
当定义MaxSize等于100时 输出120000
对数据变量赋值和调用就和普通变量一样,
如
在MaxSize = 2时
S tmp = {{1,1,1},{1,1,1}};
------解决方案--------------------
还是看代码吧
- C/C++ code
#include <iostream> using namespace std; #define MaxSize 10 struct //没有typedef的才是定义变量 { int i; int j; int di; }S[MaxSize]; //此处定义十个结构体变量 int main() { printf("%d\n", sizeof(S[MaxSize])); //此处结果为12,因为实际上测试的是一个数组元素S[10],当然,这个元素实际上也是非法的,越界了 printf("%d\n", sizeof(S)); //这里的结果为120,因为是十个结构体的变量,每个12,十个自然是120,把MaxSize改成100,这里就是1200了 return 0; }
------解决方案--------------------
printf("%d\n",sizeof(S[MaxSize]));//这样写是越界的,应该这样学 printf("%d\n",sizeof(S));
------解决方案--------------------
printf("%d\n",sizeof(S[MaxSize]));//这样写是非法的,应该这样学 printf("%d\n",sizeof(S));