C语言基础之基本数据类型--语言基础

一)语言特性

1)关键字

又叫保留字,不允许作为标识符出现在程序中

autedoubleintstatic
breakelseifstruct
caseenumlongswitch
charexternregistertypedef
constfloatunionreturn
continueforshortunsigned
defaultgotosignedvoid
dowhilesizeofvolatile

2)标识符

要在程序中使用变量、常量、函数、数组、结构体、指针等,就要为这些形式设定一个名称,而这些所谓的名称就是标识符。

  • 命名规则:
    1. 所有标识符必须由字母或下划线"_" 开头,不能是数字或其他符号
    2. 除了开头,其他位置由字母、下划线、数字组成
    3. 区分大小写字母
    4. 不能是关键字,故关键字也称保留字
    5. 命名最好具有相关含义
    6. ANSI标准规定,标识符可以为任意长度,但是必须仅前八个字符就能区分。(不同规范,标准不一。不同编译环境,也未必相同)
  • 命名 规范:
  1. 常量统一为大写
#define MAX 1024
  1. 普通变量,取与实际意义相关名称,首字母前添加类型的首字母,且名称首字母大写
int iNumber = 1;
float fNumber = 1.0;
double dNumber = 1.0;
long lNumber = 1;
  1. 指针:标识符前添加p,名称首字母大写
int* pNumber;
  1. 函数:首字母大写,后面大小写组合
int FindMax(int iNumber, int iNumber)

3)注释

/*单行注释*/

int iNum = 1;  /*在语句后*/

/*
	多行注释
	多行注释
*/

二)数据类型

  • 基本数据类型:
  1. 整形:短整型、整形、长整型、无符号整形等
  2. 字符型
  3. 实型(浮点型);单精度整形、双精度整形
  4. 枚举类型
  • 构造数据类型:
  1. 数组类型
  2. 结构体类型
  3. 共用体类型
  • 指针类型
  • 空类型

三)常量

1)数值常量:

a)整形常量

  1. 整形常量就是直接使用的整形常数
  2. 整形根据所占字节数的不同分为短整型、基本整形、长整型
  3. 根据有无符合分为无符号整形和有符号整形
  4. 在常量后面加上符号修饰:L表示该常量为长整型;U表示无符号整形,大小写均可。
long a = 10L;
unsigned b = 10U;
  1. 整形常量有三种形式进行表:八进制、十六进制、十进制
    八进制:常量前面加0进行修饰,所含数字0至7;
    十六进制:0x作前缀修饰,所含数字0至9,字母A至F,大小写均可;
    十进制:不加前缀修饰,所含数字0至9;
int a = 10;		/*十进制*/
int b = 012;	/*八进制*/
int c = 0xA;	/*十六进制*/

/*以下均非法*/
a = 08;
a = 0129;
a = 0x123j;

b)实型常量

也称浮点数,由整数部分和小数部分构成,用小数点隔开。

  1. 一般计数方式:使用十进制的小数方式描述
a = 1.23;
b = 0.01;
  1. 指数方式:使用e或E做指数
a = 2e2;   	/*200*/
b= 2e-2;	/*0.02*/
  1. 使用F和L分别修饰float单精度浮点型和long double长双精度浮点型,后缀大小写通用。
  2. 默认为double双精度浮点型

2)字符型常量

a)字符常量

使用单引号括起来的一个字符,就是字符常量,如:‘1’、‘a’、’#’、'A’等。
注意:

  1. 字符常量中只能包含一个字符,不能是字符串,如:'ab’非法
  2. 字符常量区分大小写
  3. 单引号对 ’ ’ 代表界定符,不是字符常量的一部分。

b)字符串常量

  1. 使用一组双引号括起来的若干字符序列,若字符串中无字符,称为空串,即"",其长度为零。
  2. C语言中存储字符串常量时,系统在其末尾自动添加一个技术标志"\0",在编写时不必手动添加。
  3. 字符常量与字符串常量区别:
    • 界定符不同
    • 长度不同,空串为0,其余要加上"\0"的长度
    • 存储方式不同,字符常量存储的是字符的ASCII值,字符串还要存储"\0"

c)转义字符

  1. 一种特殊符号,计算机遇见时自动转换为对应操作
  2. 以反斜杠“\”开头的字符
转义字符意义ASCII码
\n回车换行,将当前位置移到下一行开头010
\t水平制表,相当于Tab键009
\b退格,将当前位置移到前一列008
\r回车不换行,将当前位置移到本行开头013
\v垂直制表011
\a响铃007
\f换页,将当前位置移到下页开头012
\代表一个反斜线字符’’’092
代表一个单引号(撇号)字符039
"代表一个双引号字符034
?代表一个问号063
\0空字符000
\ddd1到3位八进制数所代表的任意字符三位八进制
\xhh十六进制所代表的任意字符不限位数

3)符号常量

宏定义

#define MAX 1024   
/*MAX就是1024,是一种宏替换*/ 

四)变量

整型变量

类型完整关键字最简版其他版本
有符号基本整型signed intint
无符号基本整型unsigned intunsigned
有符号短整型signed short intshortshort int
无符号短整型unsigned short intunsigned short
有符号长整型signed long intlonglong int
无符号长整型unsigned long intunsigned long
  1. 一般都使用最简的写法。
  2. 不同类型区别在于:在内存中所占字节数不同、取值范围不同
  3. 故程序员应根据需求合理使用不同类型变量
  4. 变量的定义、初始化、赋值:
    + 定义: 变量类型 变量名;
    + 初始化:变量在定义时赋初值
    + 赋值:变量定义后赋值,只有定义后才能赋值
/*以有符号长整型为例*/
long lNum;	/*定义*/
lNum = 2;	/*赋值*/

long lNum2 = 3; 	/*定义并初始化*/

/*错误*/
lNum3 = 4;
long lNum;

实型变量

又称浮点型变量,用于存储浮点型数值的变量。

类型关键字
单精度浮点型float
双精度浮点型double
长双精度浮点型long double
  1. 区别:在内存中所占字节不同,取值范围不同,精度不同。
  2. 定义:
float a = 0.1;
double b = 0.1;
long double c = 0.1;
c = 0.2;

字符型变量

  1. 用于存储字符常量的变量。将一个字符常量存储到一个字符变量中,实际上实际上是将其对应的ASCII值(一个无符号整数)存储到内存单元中去。
  2. 一个字符型变量在内存中占一个字节。
  3. 使用关键字char定义字符变量。
  4. C语言允许字符型数据与整形数据间通用,按照ASCII值一一对应。
char cChar = 'a';
char cCh = 96;

printf("%d\n",cChar);
printf("%d\n",cCh);
printf("%c\n",cChar);
printf("%c\n",cCh);

结果:

96
96
a
a

两者通用。

五)变量的存储类别

1)静态存储、动态存储

  1. 静态存储:程序运行时为其分配 固定存储空间,直至运行结束才清除。
  2. 动态存储:程序运行期间根据需要动态的分配存储空间,用时分配,用完删除。
  3. 作用域:变量起作用的区域,在此区域内可以自由合法地使用变量,在作用域外使用该变量,是非法的。
  4. 函数的内部变量:在函数内定义的变量,其作用域为从定义处开始,到函数结束处。
  5. 函数的外部变量:在函数外定义的变量,作用域需依据具体情况分析。
  6. 若一区域内变量与全局变量重名,则全局变量作用域不包含此区域。
#include<stdio.h>
int a;					/*a为全局变量,作用域为从定义处开始,到程序结束*/

void main(){
	int b;				/*b为局部变量,作用域为从定义处开始,到主函数main()结束,但不包含其中的子函数*/		
	
	void print(int x)
	{
		int c;			/*c为局部变量,作用域为从定义处开始,到子函数print()结束处结束,但不包含其中的子函数*/
		int a;			/*作用域与c类似,区域外的a在函数不起作用*/
		....
		printf(".....")
		....
	}
}

2)自动:aute变量

  1. auto关键字用于定义一个局部变量为自动型,即每次执行该定义语句时,都会产生一个新变量,并对其初始化。
  2. 关键字auto是可以省略的,在定义变量时,若不特别指定,默认为自动型。
/*定义*/
aute int a=1;
aute float b=0.1;
/*省略,默认自动型变量*/
int a=1;
float b=0.1;

3)静态:static变量

  1. 为静态变量,在函数的内部使用static变量和在函数外使用意义不一样。
  2. 初始化操作只在第一次执行时起作用,然后变量将保持上一次执行时的值。
int i;
for(i=0;i<2;i++){
	static int iNum=1;  /*只执行一次*/
	iNum = iNum + 1;
	printf("%d\n",iNum);
	}
结果:
2
3

与自动型区别:

int i;
for(i=0;i<2;i++){
	auto int iNum=1;  /*每次都执行执行*/
	iNum = iNum + 1;
	printf("%d\n",iNum);
	}
结果:
2
2

4)寄存器:register变量

  1. 称为寄存器存储型变量
  2. 程序员使用register变量,把局部变量指定存放在计算机的某一硬件存储器中,而不是内存中。
  3. 可以程序运行速度(理论上)
  4. 无法获取寄存器型变量的地址。
register int a;
a = 1;

5)外部存储变量,使用extern声明

  1. 在一个单元定义了的变量,需要在另一个单元中使用,用extern声明
  2. 所声明的变量必须已经定义,否则会报错。
int main(){
	int a;
	a = 1;
	
	int MaxOne(int x){
		extern a;		/*需要在子函数中使用变量a,而不选择参数的传递*/
		if(a > x)
		{
			return a;
		}
		else 
			return x;
	}
}
  1. 引用另一文件中定义的变量。
  2. 即在超出该变量的作用域外使用该变量,需使用extern声明,使其作用域扩大。

六)混合运算中的隐性类型转化

不同类型数据 之间可以进行混合运算,所以 在计算时不同类型数据要进行类型转化,隐性的,即计算机自动进行的,需考虑数据精度的丢失。
遵循规则:

char
short
int
unsigned
long
float
double
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值