C语言复健记录一:关于变量

本文详细介绍了C语言中的变量类型及其大小,包括char、int、short、long、longlong、float、double等,并解释了有符号和无符号变量的区别。同时,深入探讨了指针变量在32位和64位系统下的大小差异,以及如何正确使用printf进行不同类型的数据输出。

有将近两年没有摸C的代码,有点生疏了,现在通过复健顺便记录下一些重点问题.最近因为跨平台开发,所以先熟悉变量的问题.

常用变量类型及大小

C语言和其他的语言不太一样,对于细节要求的比较严格,变量定义好之后,都必须注意其大小和类型,大小错误会出现大大小小的问题,比如大小没有注意,在赋值指针变量之后,会出现对不齐的现象,而类型没有注意的话,最常见的就是printf()在输出的时候会报错.
常用的变量类型有
short,int,long,longlong,char,float,double
这几种除了char之外,都有无符号(unsigned)等关键字,顾名思义,无符号变量中没有负值,但是存储的内存长度和有符号变量保持一致,一般不加关键字的情况下,默认为有符号变量,他们对于不同的编译器来说,大小不尽相同,同时有可以在32/64位系统中通过sizeof()函数 查询变量大小:

#include <stdio.h>

int main()
{
	printf("this is 32-bit ubuntu.\n");
	printf("int is %d byte\n",sizeof(int) );
	printf("char is %d byte\n",sizeof(char) );
	printf("short is %d byte\n",sizeof(short) );
	printf("float is %d byte\n",sizeof(float) );
	printf("long is %d byte\n",sizeof(long) );
	printf("double is %d byte\n",sizeof(double) );
	printf("unsigned int is %d byte\n",sizeof(unsigned int) );

}

输出结果为:

this is 32-bit ubuntu.
int is 4 byte
char is 1 byte
short is 2 byte
float is 4 byte
long is 4 byte
double is 8 byte
unsigned int is 4 byte

变量名长度
char1 bytes
int4 bytes
short2 bytes
long4 bytes
float4 bytes
double8 bytes
unsigned int4 bytes

指针变量

指针变量也属于变量的一种,在不同的平台下,其大小不一致,这个需要重点注意:
在32-bit系统中,总线地址为32位,内存的最大寻址范围为0~2^32(0-4Gb). 所以在32位系统中,指针变量大小一般为32-bit/4-byte.
在64-bit系统中,总线地址为64位,理论上内存最大的寻址范围变为0~2^64(), 所以在64位系统中,变量指针大小一般为64bit/8byte.

#include <stdio.h>

int main()
{
	int *p;
	printf("变量储存大小为%d\n",sizeof(*p) );
	printf("变量指针大小为%d\n",sizeof(p) );
	printf("存储变量指针地址的地址大小为:%d\n",sizeof(&p) );
}

64位系统中:

变量储存大小为4
变量指针大小为8
存储变量指针地址的地址大小为:8

32位系统中:

变量储存大小为4
变量指针大小为4
存储变量指针地址的地址大小为:4

所以在跨平台处理指针时,需要特别注意这一处.

输入和输出

C对不同类型的类型有严格的规定,每种类型都有对应的输出标志, 如果使用不当, 程序会报错, 转换说明如下:

转换说明输出类型
%a浮点数和十六进制数,p计数法
%A浮点数和十六进制数 ,p计数法
%c单个字符,char类型
%d有符号十进制整数
%e浮点数,e计数法
%E浮点数,e计数法
%f浮点数,十进制计数法
%g自动选择%f或%e
%G自动选择%f或%E
%i有符号十进制整数,与%d一样
%o无符号8进制整数
%p指针
%s字符串
%u无符号十进制整数
%x无符号十六进制整数,使用十六进制数0f
%X无符号十六进制整数,使用十六进制数0F
%%打印百分号

举个例子:

#include <stdio.h>

int main()
{
	int *p;
	int a=-10;
	float b=1.1;
	float f=11000.2222;
	unsigned int c=100;
	char d ='H';

	printf("%%a:%a\n",b );
	printf("%%A:%A\n",b );
	printf("%%c:%c\n",d );
	printf("%%d:%d\n",a );
	printf("%%e:%e\n",f );
	printf("%%E:%E\n",f );
	printf("%%f:%f\n",f );
	printf("%%o:%o\n",c );
	printf("%%p:%p\n",p );
	printf("%%u:%i\n",c );
	printf("%%x:%x\n",c );

}

结果如下:

%a:0x1.19999ap+0
%A:0X1.19999AP+0
%c:H
%d:-10
%e:1.100022e+04
%E:1.100022E+04
%f:11000.222656
%o:144
%p:(nil)
%u:100
%x:64

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值