《C语言3—标识符,关键字,数据类型》
2019年3月7日星期四 阴转多云
今天天气依旧挺好的哇,有阳光。(我想问一下多云和晴的界限到底是啥?我感觉是晴天气预报说多云。)
早上出门的时候很冷。
昨天晚上心情有点down,所以没学多少C语言,今天继续学习啊。
(声明,理论知识部分全部来自菜鸟教程!)
今日学习内容:(上接C语言基础知识学习2)
(3)标识符
C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。
一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。
9、关键字
下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。
关键字 | 说明 |
---|---|
auto | 声明自动变量 |
break | 跳出当前循环 |
case | 开关语句分支 |
char | 声明字符型变量或函数返回值类型 |
const | 声明只读变量 |
continue | 结束当前循环,开始下一轮循环 |
default | 开关语句中的"其它"分支 |
do | 循环语句的循环体 |
double | 声明双精度浮点型变量或函数返回值类型 |
else | 条件语句否定分支(与 if 连用) |
enum | 声明枚举类型 |
extern | 声明变量或函数是在其它文件或本文件的其他位置定义 |
float | 声明浮点型变量或函数返回值类型 |
for | 一种循环语句 |
goto | 无条件跳转语句 |
if | 条件语句 |
int | 声明整型变量或函数 |
long | 声明长整型变量或函数返回值类型 |
register | 声明寄存器变量 |
return | 子程序返回语句(可以带参数,也可不带参数) |
short | 声明短整型变量或函数 |
signed | 声明有符号类型变量或函数 |
sizeof | 计算数据类型或变量长度(即所占字节数) |
static | 声明静态变量 |
struct | 声明结构体类型 |
switch | 用于开关语句 |
typedef | 用以给数据类型取别名 |
unsigned | 声明无符号类型变量或函数 |
union | 声明共用体类型 |
void | 声明函数无返回值或无参数,声明无类型指针 |
volatile | 说明变量在程序执行中可被隐含地改变 |
while | 循环语句的循环条件 |
C99新增关键字
C11新增关键字
10、C 中的空格
只包含空格的行,被称为空白行,可能带有注释,C 编译器会完全忽略它。
在 C 中,空格用于描述空白符、制表符、换行符和注释。
空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。
(简单来说就是关键字与其他的代码要有空格来让编译器识别出来,不然关键字可能不能起到该有的作用。)
11、C 数据类型
在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
序号 | 类型与描述 |
---|---|
1 | 基本类型:它们是算术类型,包括两种类型:整数类型和浮点类型。 |
2 | 枚举类型:它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。 |
3 | void 类型:类型说明符 void 表明没有可用的值。 |
4 | 派生类型:它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。 |
数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。
(1)整数类型
下表列出了关于标准整数类型的存储大小和值范围的细节:
注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。
以下列出了32位系统与64位系统的存储大小的差别(windows 相同):
为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小。下面的实例演示了获取 int 类型的大小:
#include <stdio.h>
#include <limits.h>
int main()
{
printf("int 存储大小 : %lu \n", sizeof(int));
return 0;
}
%lu 为 32 位无符号整数,详细说明查看 C 库函数 - printf()。
当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:
int 存储大小 : 4
(2)浮点类型
下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位小数 |
double | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位小数 |
long double | 16 字节 | 3.4E-4932 到 1.1E+4932 | 19 位小数 |
头文件 float.h 定义了宏,在程序中可以使用这些值和其他有关实数二进制表示的细节。
下面的实例将输出浮点类型占用的存储空间以及它的范围值:
实例:
#include <stdio.h>
#include <float.h>
int main()
{
printf("float 存储最大字节数 : %d \n", sizeof(float));
printf("float 最小值: %E\n", FLT_MIN );
printf("float 最大值: %E\n", FLT_MAX );
printf("精度值: %d\n", FLT_DIG );
return 0;
}
%E 为以指数形式输出单、双精度实数,详细说明查看 C 库函数 - printf()。
当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:
float 存储最大字节数 : 4
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6
(补充:FLT_MIN、FLT_MAX、FLT_EPSILON是C++中的定义:
/* min positive value */
#define FLT_MIN 1.175494351e-38F
/* max value */
#define FLT_MAX 3.402823466e+38F
/* smallest such that 1.0+FLT_EPSILON != 1.0 */
#define FLT_EPSILON 1.192092896e-07F
就是定义了FLOAT所能表示的最大值,最小值,以及最小的正数。)
(3)void类型
void 类型指定没有可用的值。它通常用于以下三种情况下:
序号 | 类型与描述 |
---|---|
1 | 函数返回为空:C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status); |
2 | 函数参数为空:C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void); |
3 | 指针指向 void:类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。 |
(这里想提一个疑问啊,就是Markdown里面如何实现一个表格框内换行呢?就像下面截图这样。)
摘录别人的笔记:
常用基本数据类型占用空间(64位机器为例):
char : 1个字节
int :4个字节
float:4个字节
double:8个字节
基本类型书写:
整数:
a,默认为10进制 ,10 ,20。
b,以0开头为8进制,045,021。
c.,以0b开头为2进制,0b11101101。
d,以0x开头为16进制,0x21458adf。
小数:
单精度常量:2.3f 。
双精度常量:2.3,默认为双精度。
字符型常量:用英文单引号括起来,只保存一个字符'a'、'b' 、'*' ,还有转义字符 '\n' 、'\t'。
字符串常量:用英文的双引号引起来 可以保存多个字符:"abc"。
11、C 变量
变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的。
有以下几种基本的变量类型:
C 语言也允许定义各种其他类型的变量,比如枚举、指针、数组、结构、共用体等等。
(1)C 中的变量定义
变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示:
type variable_list;
在这里,type 必须是一个有效的 C 数据类型,可以是 char、w_char、int、float、double 或任何用户自定义的对象,variable_list 可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。
变量可以在声明的时候被初始化(指定一个初始值)。初始化器由一个等号,后跟一个常量表达式组成。
下面列举几个实例:
extern int d = 3, f = 5; // d 和 f 的声明与初始化
int d = 3, f = 5; // 定义并初始化 d 和 f
byte z = 22; // 定义并初始化 z
char x = 'x'; // 变量 x 的值为 'x'
不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。
最后说几句昨天留下来的提问吧。
今天和同学们去找吴老师开会之后她和我们唠嗑,我才知道原来她是工作了八年才考研到大学里面,然后继续读博,最后当大学老师到现在。在这过程中她自己一直在不断学习,之间还学了个啥电子做衣服,嗯我不知道做啥的,但是很厉害的样子。她告诉我们,不管是在工作还是读研,不管怎么样都要一直学习,她就算当老师也是一直每天都要抽时间来自己学习,也说在学习上留下了很多疑问和难题,希望能够把这些疑问和难题解决掉,不留遗憾。
听完这些感觉很是敬佩啊,以前大家都说她教书有些晦涩之类的,我想和她工作了八年相当于比别人晚八年有关吧,所以可能有点欠缺。但是不是每个人工作八年后都有勇气去考研,也不是每个人都能够考上,她现在也是很厉害的啊。
不管怎么样,努力都是必要的啊!
weif
2019年3月7日