数据类型

变量和常量

四大基本类型:

  • 整型
  • 浮点型
  • 字符型
  • 枚举类型
    三大构造类型:
  • 数组类型
  • 结构体类型
  • 共用体类型
    其他:
  • 指针类型
  • 空类型

标识符命名规范

例如:

int intnum;

intnum称为标识符 int称为关键字。标识符必须是字母数字下划线组成的,并且首字符是字母或者下滑线,标识符不能与C语言关键字同名:

double int;//错误示例:int为关键字 标识符不能以int命名
常见关键字:

C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类,随便 看看即可。

1 数据类型关键字(12个):

(1) char :声明字符型变量或函数
(2) double :声明双精度变量或函数
(3) enum :声明枚举类型
(4) float:声明浮点型变量或函数
(5) int: 声明整型变量或函数
(6) long :声明长整型变量或函数
(7) short :声明短整型变量或函数
(8) signed:声明有符号类型变量或函数
(9) struct:声明结构体变量或函数
(10) union:声明共用体(联合)数据类型
(11) unsigned:声明无符号类型变量或函数
(12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)

2控制语句关键字(12个):

A循环语句
(1) for:一种循环语句(可意会不可言传)
(2) do :循环语句的循环体
(3) while :循环语句的循环条件
(4) break:跳出当前循环
(5) continue:结束当前循环,开始下一轮循环
B条件语句
(1)if: 条件语句
(2)else :条件语句否定分支(与 if 连用)
(3)goto:无条件跳转语句
C开关语句
(1)switch :用于开关语句
(2)case:开关语句分支
(3)default:开关语句中的“其他”分支
D返回语句
return :子程序返回语句(可以带参数,也看不带参数)

3 存储类型关键字(4个)

(1)auto :声明自动变量 一般不使用
(2)extern:声明变量是在其他文件正声明(也可以看做是引用变量)
(3)register:声明积存器变量
(4)static :声明静态变量

4 其它关键字(4个):

(1)const :声明只读变量
(2)sizeof:计算数据类型长度
(3)typedef:用以给数据类型取别名(当然还有其他作用
(4)volatile:说明变量在程序执行中可被隐含地改变

整型

整数数字
表示形式:十进制,八进制,十六进制
关键字:int, long, unsigned int,long long
范围:(32/64位系统)int :-2147483648 ~ +2147483647 (-2^31 ~ 2^31-1) usigned int , long long等根据系统硬件特性自主选择合适的类型长度但是总有:long long>=long>=int>=short
例如:

int a=-1;//a=-1
int b,c=2;//声明b为int  c=2
int d=3,e;//d=3 声明 e为int
long z=234;
long long r=89;
int num_16=0x123;//十六进制
int num_8=0798;//八进制

备注:
【1】未初始化的局部变量值随机,直接运行,其结果还要看编译器:vc++6.0会报警告,运行后是随机值,VS2013会直接编译不通过。
【2】如果是全局变量或者静态变量,数组中元素则为0。其它数据类型也是类似int。

【3】值不可带小数点

【4】unsigned代表无符号,少了符号位,使得可以空出这一位存储空间来存储数值,数值范围加倍了

【5】若超出范围并不会报错而是类似于一个环状机构,像一个钟表24点后是1点.例如:int 型2147483647+1=-2147483648

int f=1.0;//错误

浮点型

小数数字
表示形式:十进制形式和科学计数法
关键字:float ,double,long double
范围:float:比特数为32,有效数字位数为7,数值范围为 -3.4e+38 和 3.4e+38 double:比特数为64,有效数字位数为15,数值范围为-1.7e-308~1.7e+308 long double:128比特 19位有效数字 范围 -1.2e-4932 ~ 1.2e4932

	double i = 23.65488;
	double n = .12;
	float m = 123.45678;//超过有效位数,之后的位数可能不对应,实际数字不是123.45678
	printf("%f\n", i);
	printf("%f\n", n);
	printf("%f\n", m);/*%f用来输出实数,包括单精度和双精度,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出 6 位,超过 6 位的四舍五入*/

运行结果:
在这里插入图片描述

科学计数法

例如:0.12=1.2*10^-1可写作:1.2e-1 12e-2
注意:指数只能为整数

字符型

关键字:char ,unsigned char
范围:char:-127-128 unsigned char:0-255
例如:

	char c1 = 'a';
	char c2 = 3;
	printf("%c,%c", c1,c2);
	printf("\60");
	printf("%d,%d",c1,c2);

转义字符:不可打印的控制字符以及有着特殊功能的字符

在这里插入图片描述

备注:
【1】兼具两种身份:本质上是一种整数,不过它是专门用来表示字符的整数,其对应关系就是ascii码.当数字形式访问时就是整数,当以字符形式访问时就是对应的字符,经常用来表示小范围数字如: unsigned char:0-255经常应用在像素三原色的数值中

【2】大小写字母等常用ascii:https://tool.oschina.net/commons?type=4.

【3】十六进制转义字符 如:\x26 其中必须为小写x,\X26会导致转义失败。打印时前者打印&后者打印X26

指针

存储数据内存地址的变量,不同类型的数据内存占用也不同,除了言明首地址还需要言明数据类型,这样才能得知数据的整个地址。所以指针也要声明类型例如:

char a = 'a';
	int f = 2;
	char* p=&a;
	int* num;
	num = &f;
	printf("%c", *p);
	printf("%d", *num);
	

书写时int* p=& num; 和int p=& num;是一样的效果,但是一眼瞄去意义却不同。前者int 我们更认为是定义指针的关键字,标识符为p值为num的首地址,这样的书写很合乎逻辑,而后者则无逻辑感。
*地址 是取该 地址处 存储的 值
单独的指针没有难点,它和函数,数组有着说不清的联系。

字符串

C语言从来没有字符串类型,C++有Java有很多高级语言都有。无论何种语言,字符串本质上就是一个最后元素为‘\0’的字符数组,C语言中我们直接用这样的数组实现字符串这个数据结构。

数组

数组是一串存储相同类型数据的构造类型数据
类型:int char 等包括重要的指针类型
例如:

	int a[] = { 1, 2, 4 };
	char b[] = { 'a', 'b', 'c', '\0' };
	printf("%d", a[0]);
	printf("%s", b);

为了开辟相应大小的内存,定义时要初始化元素个数(上下两种方式)。当中的每个元素值可以不初始化,不初始化的时候数值随机,只初始化一部分则未初始化元素数值为默认值如:0等。

	int a[3];
	int b[3] = { 1, 2, 3 };
	int c[2] = { 2 };
	printf("%d\n", a[1]);//a所有元素全部未初始化
	printf("%d,%d", c[0], c[1]);//c第二个元素未初始化

在这里插入图片描述

二维数组

数组可以是多维。本质上就是 元素为数组的 数组。

    int a[][2] = { { 1, 2 }, {2,3} };//每个元素数组  的元素数为2
	int b[][2] = { { 2 }, { 3 } };
	int c[2][2] = { { 2, 3 }, { 3 } };

二维数组初始化和一维的类似,也是为了开辟内存空间。

int g[][]={{2,3},{2,4}};//错误

上例编译器只知道g是一个盛有两个元素为数组的数组,但是元素数组中 几个元素并不清楚,这跟C的设定有关,越是精简越是运行快,要嘛是运行速度,要嘛是学习成本和开发效率。像python,java这类的高级语言就会内部完成所有人性化的功能,不用你顾及这顾及那,高效的开发带来的是剧增的运行时所占内存和运行速度。C追逐的是“必要”,它们追逐的是“需要”。

常量

常量就是固定不变的量,不可以被更改,可读不可写。常量也有很多类型如:字符型,数值型,数组,枚举

字符数值数组常量

例如:

const char s[] = "hello,world";
	const int i = 0;
	const double num[] = { 1, 3, 4.000, 3 };
	const char d = 'd';
	const double f = 0;
	const double e=4;
	

符号常量

宏定义的常量,注意宏不是C语句后边没有;,宏在编译前起作用。

枚举类型

枚举就是列出所有可能的值,变量的值只能在这些当中选取。没啥好说的(_

enum s{s1='s',s2='g',s3='3',s4=' '};//定义枚举常量表
	enum s sa,sb,sc;//定义枚举变量(C++ 定义:s sa,sb,sc;)
	sa = s1;//枚举变量赋值方式1
	sb = (enum s)'g';//枚举变量赋值方式2:强制转型

	enum z{one=3,two=1,three=0};
	enum z z1, z2;
	z1 = one;
	printf("%c,%c\n", sa,sb);
	printf("%d,%d", one, two);
	

在这里插入图片描述

结构体

数组的升级版,一种可以存储多种变量类型 的变量.没啥好说的(_
会定义,初始化,访问,元素访问就可以。

#include<stdio.h>
//#include<Windows.h>




struct {
	int i;
	char s;
	int d;
}s1,s2;//匿名结构体 定义s1,s2变量

s1 = { 2, '3', 5 };

 struct doc{
	int i;
	char s;
	int d;
}d = { 1, '1', 1 };//doc结构体 定义变量d并初始化

struct doc d1 = { 1, '2', 3 };
typedef struct mylife{//定义类型别名:struct mylife-> Life
	int n;
	int m;
	struct doc a;//doc类型 声明
}Life;


int main(){
	Life li = { 1, 1, d };
	printf("%d", li.a.i);
	
	//Sleep(10000);
}

共用体

没啥好说的
见: link

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值