C语言基本数据类型简介1.概述C 语言包含的数据类型如下图所示:2.各种数据类型介绍2.1整型整形包括短整型、整形和长整形。
2.1.1短整形short a=1;2.1.2整形一般占4个字节(32位),最高位代表符号,0表示正数,1表示负数,取值围是-2147483648~2147483647,在存中的存储顺序是地位在前、高位在后,例如0x12345678在存中的存储如下:地址:0x0012ff780x0012ff790x0012ff7a0x0012ff7b数据:78563412定义:用int关键字,举例如下:int a=6;2.1.3长整形long a=10;2.2浮点型浮点型包括单精度型和双精度型。
2.2.1单精度型浮点型,又称实型,也称单精度。
一般占4个字节(32位),float a=4.5;地址:0x0012ff780x0012ff790x0012ff7a0x0012ff7b数据:000090402.2.2双精度型一般占8个字节(64位)double a=4.5;地址:0x0012ff780x0012ff790x0012ff7a0x0012ff7b0x0012ff7c 0x0012ff7d0x0012ff7e0x0012ff7f数据:0000000000 0012402.3字符类型在各种不同系统中,字符类型都占一个字节(8位)。
定义如下:char c='a';也可以用字符对应的ASCII码赋值,如下:char c=97;3.数据类型与“模子”short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。
怎么去理解它们呢? 举个例子:见过藕煤球的那个东西吧?(没见过?煤球总见过吧)。
那个东西叫藕煤器,拿着它在和好的煤堆里这么一咔,一个煤球出来了。
半径12cm,12 个孔。
不同型号的藕煤器咔出来的煤球大小不一样,孔数也不一样。
这个藕煤器其实就是个模子。
现在我们联想一下,short、int、long、char、float、double 这六个东东是不是很像不同类型的藕煤器啊?拿着它们在存上咔咔咔,不同大小的存就分配好了,当然别忘了给它们取个好听的名字。
在32 位的系统上short 短整型的存2 byte;int 整型的存4 byte;long 长整型的存4 byte;float 单精度浮点型的存4byte;仅能接收7位有效数字double 双精度浮点型的存8 byte;可以接收16位有效数字char字符型的存1 byte。
fabs单精度浮点型存4byte.(注意这里指一般情况,可能不同的平台还会有所不同,具体平台可以用sizeof 关键字测试一下)很简单吧?咔咔咔很爽吧?是很简单,也确实很爽,但问题就是你咔出来这么多存块,你总不能给他取名字叫做x1,x2,x3,x4,x5…或者长江1 号,长江2 号…吧。
它们长得这么像(不是你家的老大,老二,老三…),过一阵子你就会忘了到底哪个名字和哪个存块匹配了(到底谁嫁给谁了啊?^_^)。
所以呢,给他们取一个好的名字绝对重要。
下面我们就来研究研究取什么样的名字好。
4.变量的命名规则1)命名应当直观且可以拼读,可望文知意,便于记忆和阅读。
标识符最好采用英文单词或其组合,不允许使用拼音。
程序中的英文单词一般不要太复杂,用词应当准确。
2)命名的长度应当符合“min-length && max-information”原则。
C 是一种简洁的语言, 命名也应该是简洁的。
例如变量名MaxVal 就比MaxValueUntilOverflow 好用。
标识符的长度一般不要过长,较长的单词可通过去掉“元音”形成缩写。
另外,英文词尽量不缩写,特别是非常用专业名词,如果有缩写,在同一系统中对同一单词必须使用相同的表示法,并且注明其意思。
3)当标识符由多个词组成时,每个词的第一个字母大写,其余全部小写。
比如:int CurrentVal;这样的名字看起来比较清晰,远比一长串字符好得多。
4)尽量避免名字中出现数字编号,如Value1,Value2 等,除非逻辑上的确需要编号。
比如驱动开发时为管脚命名,非编号名字反而不好。
初学者总是喜欢用带编号的变量名或函数名,这样子看上去很简单方便,但其实是一颗颗定时炸弹。
这个习惯初学者一定要改过来。
5)对在多个文件之间共同使用的全局变量或函数要加围限定符(建议使用模块名(缩写)作为围限定符)。
(GUI_ ,etc)标识符的命名规则:6)标识符名分为两部分:规标识符前缀(后缀) + 含义标识。
非全局变量可以不用使用围限定符前缀。
7)作用域前缀命名规则。
8)数据类型前缀命名规则。
9)含义标识命名规则,变量命名使用名词性词组,函数命名使用动词性词组。
例如:变量含义标识符构成:目标词+ 动词(的过去分词)+ [状语] + [目的地];函数含义标识符构成:动词(一般现时)+目标词+[状语]+[目的地];10)程序中不得出现仅靠大小写区分的相似的标识符。
例如:int x, X; 变量x 与X 容易混淆void foo(int x); 函数foo 与FOO 容易混淆void FOO(float x);这里还有一个要特别注意的就是1(数字1)和l(小写字母l)之间,0(数字0)和o(小写字母o)之间的区别。
这两对真是很难区分的,我曾经的一个同事就被这个问题折腾了一次。
11)一个函数名禁止被用于其它之处。
例如:#include "c_standards.h"void foo(int p_1){int x = p_1;}void static_p(void){int foo = 1u;}12)所有宏定义、枚举常数、只读变量全用大写字母命名,用下划线分割单词。
例如:const int MAX_LENGTH = 100; //这不是常量,而是一个只读变量,具体请往后看#define FILE_PATH “/usr/tmp”13)考虑到习惯性问题,局部变量中可采用通用的命名方式,仅限于n、i、j 等作为循环变量使用。
一定不要写出如下这样的代码:int p;char i;int c;char * a;一般来说习惯上用n,m,i,j,k 等表示int 类型的变量;c,ch 等表示字符类型变量;a 等表示数组;p 等表示指针。
当然这仅仅是一般习惯,除了i,j,k 等可以用来表示循环变量外,别的字符变量名尽量不要使用。
14)定义变量的同时千万千万别忘了初始化。
定义变量时编译器并不一定清空了这块存,它的值可能是无效的数据。
这个问题在存管理那章有非常详细的讨论,请参看。
15)不同类型数据之间的运算要注意精度扩展问题,一般低精度数据将向高精度数据扩展。
格式字符串列表在c语言中%p ,%d和%x 的区别%p 是以16进制的形式输出存地址%x 也是以16进制的形式输出存地址不过%p的输出字符为8个前2个为00%x只有6个他们有什么区别吗?%d 可以输出整数也可以以10进制的形式输出指针这里输出的是地址吗?%d 是有符号的%x 是无符号的%p 呢?当我用%d表示-2的时候输出结果为-2但我用%u表示-2的时候输出结果却是4294967294`变量声明和定义的区别我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)变量的声明有两种情况:1、一种是需要建立存储空间的。
例如:int a 在声明的时候就已经建立了存储空间。
2、另一种是不需要建立存储空间的。
例如:extern int a 其中变量a是在别的文件中定义的。
前者是“定义性声明(defining declaration)”或者称为“定义(definition)”,而后者是“引用性声明(referncing declaration)”,从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义,例如:int a 它既是声明,同时又是定义。
然而对于extern a 来讲它只是声明不是定义。
一般的情况下我们常常这样叙述,把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。
很明显我们在这里指的声明是围比较窄的,即狭义上的声明,也就是说非定义性质的声明,例如:在主函数中:int main() {extern int A;//这是个声明而不是定义,声明A是一个已经定义了的外部变量注意:声明外部变量时可以把变量类型去掉如:extern A;dosth(); //执行函数}int A; //是定义,定义了A为整型的外部变量外部变量的“定义”与外部变量的“声明”是不相同的,外部变量的定义只能有一次,它的位置是在所有函数之外,而同一个文件中的外部变量声明可以是多次的,它可以在函数之(哪个函数要用就在那个函数中声明)也可以在函数之外(在外部变量的定义点之前)。
系统会根据外部变量的定义(而不是根据外部变量的声明)分配存储空间的。
对于外部变量来讲,初始化只能是在“定义”中进行,而不是在“声明”中。
所谓的“声明”,其作用,是声明该变量是一个已在后面定义过的外部变量,仅仅是为了“提前”引用该变量而作的“声明”而已。
extern 只作声明,不作任何定义。
(我们声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用就没有单独声明的必要,变量是如此,函数也是如此,所以声明不会分配存储空间,只有定义时才会分配存储空间。
)用static来声明一个变量的作用有二:(1)对于局部变量用static声明,则是为该变量分配的空间在整个程序的执行期都始终存在。
(2)外部变量用static来声明,则该变量的作用有符号整数与无符号整数有符号整数:其最高位被C编译器解释为符号位(0为正,1为负)。
无符号整数:其最高位被C编译器解释为数据位。
注意1,对具有相同字节数的整数,有符能表示的最大整数是无符所表示的一半2,补码:负数在计算机中都是二进制补码来表示和储存。
3,补码的计算:保持符号位不变,将源码中的1换为0,0换为1为该数的反码再加1的结果就是该数的补码。
C语言中有两种方式可以表示指数:1、直接用浮点数表示:10的N次方为1e10 也可写成1e+10(如果是负N次方的话就把加号变成减号)。
e大小写都可以,需要注意的是e前面必须有一个数字,不然的话就非法表达。
2、用幂函数表示:在c语言中,求x的y次方可用pow(x,y)表示,所以10的N次方也可表示为pow(10,N)。
其中pow函数在头文件math.h中,所以调用该函数的时候,必须将math.h加进来,即#include <math.h>原型:extern float pow(float x, float y);功能:计算x的y次幂。