C语言占位符及各种变量占用字节数

简介:

自己复习C语言的时候总结了一下格式化输入输出占位符,以及各种变量的占用字节数,还有没提到的后面慢慢补充。(第一次学着发博客总结^-^,也可以帮助自己后续回顾)

部分变量类型及占用字节数:

C头文件limits.h和float.h分别提供了与整数类型和浮点类型大小限制相关的详细信息

c主要有以下几种变量,还有指针变量等等,对于占用字节数依据编译器不同,以及操作系统不同,得到的结果可能不同,本结果在Microsoft Visual Studio 2019 的32位及64位操作系统下得到。

c语言占用字节
系统类型32位64位16位
char(存储为int)111
short int222
int442
long44 
long long88 
一般情况下windows64位一般使用LLP64模型
无符号与有符号占用字节数相同
float4(默认6位精度)4(默认6位精度) 
double88 
long double88(依据编译器不同,C99只规定大于等于double)
_Complex复数的实部与虚部都基于实浮点类型构成
_Imaginary

不同编译器的数据模型不同,导致long int占用4个字节或8个字节,本身C语言规定的是long≥int。不同编译器的结果参考如下:

编译器的数据模型
此处参考原文链接:64位操作系统下,关于int和long占用字节数同为4问题_静叶沉浮-CSDN博客_64位系统long

Datetype  LP64   ILP64   LLP64   ILP32    LP32

char            1          1           1           1           1

short           2          2           2           2           2

int               4          8           4           4           2

long            8          8           4           4           4

long long    8

pointer        8          8           8           8           8
一般情况下windows64位一般使用LLP64模型
64位Unix,Linux使用的是LP64模型

格式化输入输出占位符归纳:

此处仅归纳了部分变量的占位符,以及一些函数,例如sizeof的占位符:

针对整型int变量以及浮点型float采用以下代码测试其占用字节数:

#include <stdio.h>
int main(void)
{
	short a = 1;
	int b = 2;
	long c = 3;
	long long d = 4;

	unsigned short e = 5;
	unsigned f = 6;
	unsigned long g = 7;
	unsigned long long h = 8;

	long double k = 1.0;
	double m = 9.0;

	printf("The signed type occupy %zd, %zd, %zd, %zd bytes respectively.\n", sizeof(a), sizeof(b), sizeof(c), sizeof(d));
	printf("The unsigned type occupy %zd, %zd, %zd, %zd bytes respectively.\n", sizeof(e), sizeof(f), sizeof(g), sizeof(h));
	printf("long double: %zd, double: %zd", sizeof(k), sizeof(m));

	return 0;

}

 64位和32位编译器下的输出相同:
The signed type occupy 2, 4, 4, 8 bytes respectively.
The unsigned type occupy 2, 4, 4, 8 bytes respectively.
long double: 8, double: 8

sizeof( )函数:
sizeof函数在32位操作系统下,返回数据类型为long int,64位系统下返回为long long类型,因此占位符分别用%ld,%lld。C99和C11标准提供了%zd转换说明用以匹配sizeof返回类型。因此大部分情况下都可使用%zd,而且对于strlen()同样适用。

在C primer plus中还讲到了printf()中的一些其他转换修饰符:

 先归纳到这儿吧,太久没打过代码TAT

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值