sizeof(1)是多少(sizeof的计算)

本文目录
- sizeof的计算
- 使用sizeof(S1)获取到得该结构体得大小是多少
- 假设C编译系统中规定int型数据的度是16位,则sizeof(1)的值是
- char *p=“ab“;问 sizeof(*p) 是多少请高人详细指点,我是底层软件工程师.
sizeof的计算
sizeof,Pascal的一种内存容量度量函数:C语言中判断数据类型或者表达式长度符;不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。
Pascal中用法:
Var
a:arrayoflongint;
Begin
Writeln(SizeOf(a));
End.
输出:
40000
如果定义Integer,则输出:
20000
C语言中:
判断数据类型长度符的关键字
用法
sizeof(类型说明符,数组名或表达式);
或sizeof 变量名
定义
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
MSDN上的解释为:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type(including aggregate types). This keyword returns a value of type size_t.
其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一般定义为typedef unsigned int size_t;
世上编译器林林总总,但作为一个规范,它们都会保证char、signed char和unsigned
char的sizeof值为1,毕竟char是我们编程能用的最小数据类型。
语法
sizeof有三种语法形式,如下:
sizeof(object);//sizeof(对象);
sizeof(type_name);//sizeof(类型);
sizeofobject;//sizeof对象;
所以,
int i;
sizeof(i);//ok
sizeof i;//ok
sizeof(int);//ok
sizeofint;//error
使用sizeof(S1)获取到得该结构体得大小是多少
这是内存对齐的题目考查,每个变量都有两个对齐参数:默认对齐参数,以及系统定义对齐参数,实际对齐参数取上面两者中较小的,例如上面结构体中,c的默认对齐参数是2(short类型占用的内存大小),系统定义对齐参数是4,所以变量c的实际对齐参数为2
然后关于结构体内存对齐有以下规则:
1.结构体首个成员变量的起始地址与结构体地址重合;
2.结构体成员变量的起始地址与结构体地址的偏移必须是该成员变量对齐参数的整数倍;
3.结构体的对齐参数为其内部成员变量对齐参数中最大者;
4.结构体的大小必须为结构体对齐参数的整数倍;
根据上述规则,分析你给出的结构体,假设结构体地址为0x1000
成员变量a的对齐参数为MIN(sizeof(int), 4) = 4,起始地址为0x1000,与结构体地址相同;
成员变量b的对齐参数为MIN(sizeof(int), 4) = 4,起始地址为0x1004,与结构体地址的偏移为0x1004-0x1000 = 0x04,是4的倍数
成员变量c的对齐参数为MIN(sizeof(short), 4) = 2,起始地址为0x1008,与结构体地址的偏移为0x08,是2的倍数
成员变量d的对齐参数为MIN(sizeof(char), 4) = 1,起始地址为0x100A,与结构体地址的偏移为0x0A,是1的倍数
结构体本身的对齐参数为MAX(a,b,c,d) = 4,所以结构体的size必须是4的倍数,结构体4个成员变量本身占用内存是4+4+2+1 = 11,要想满足4的倍数,因此在成员变量d后,会有一个byte的填充字节。
综上,答案是12.
假设C编译系统中规定int型数据的度是16位,则sizeof(1)的值是
1. 不同的编译器int的长度不同,各种数据类型的长度也不一定相通
16位编译器int=short int=2字节
32位器int=log int=4字节
具体编写一个程序输出各种类型占用字节数就知道了
printf("int %d\n",sizeof(int));
2. C语言的int类型与开发环境平台有关,可能是16位(2^16),也可能是32位(2^32),估计现在大多数开发环境都是用32位的,所以范围远远超出65535,可达到4294967296,所以你的程序可能可以运行
3. 你应该是用vs系列的编译器吧
微软把int类型分配了4个字节
就是int的范围是2147483647~-2147483648所以 可以执行
-----来自百度。
我也只是书上看到定义是: int的取值范围是 -32768~32767
自己跑了一下果然是。。。
char *p=“ab“;问 sizeof(*p) 是多少请高人详细指点,我是底层软件工程师.
sizeof(*p)是1,因为p是指向字符串的指针,*p是a,所以sizeof(*p)是sizeof(a)的意思,所以是1
而sizeof(p)是4,因为p是字符型的指针,它存放的是字符串的地址,既然是存放一个地址,那么就和int什么的一样,是四个字节,所以

更多文章:
jquery sortable(jquery sortable怎么支持多个一起拖拽)
2026年8月28日 14:00
数组大小计算公式(关于EXCEL里数组比较大小 然后分别赋值的公式)
2025年6月18日 08:30
addeventlistener()(window.addeventlistener怎么用)
2026年5月21日 20:00
display在java中什么意思(javascript中 visibility和display的区别)
2025年10月10日 06:30
web of science怎么看全文(如何在web of science 上检索一个学者的全部文章)
2025年12月22日 01:15
soil的翻译(英语单选提问:soil 与earth 的区别)
2026年1月16日 17:15
8086汇编语言中的DIV指令溢出问题(回答的好会加分)?汇编里面,进位一定溢出吗
2026年2月5日 09:15
readfile共享读写(MFC如何读取文件到内存,再写到磁盘)
2026年6月6日 02:45
datetime库的time引用(python中如何把datetime.datetime转换成datetime.time)
2025年10月5日 10:45
long int类型占几个字节(【C语言】关于int、long所占字节数问题的讨论万分感谢!)
2025年11月24日 21:00







![grep使用正则表达式(正则表达式:grep “^[[:space :]]*$” 表示什么)](/static/images/nopic/9.jpg)




