从0开始的c语言教程【复习+自学】
c语言教程
#include<stdio.h>//#include是预处理命令,用来引入头文件 stido表示系统文件库 stdio.h是一个头文件(标准输入输出头文件)
int main()//主函数,返回值是int类型 所以要有return 0 标准规定必须是int
{
printf(“hello world! ”);
return 0;//表示退出程序
}
c简介
c环境设置
c程序结构
c基本语法
c的令牌
关键字、标识符、常量、字符串值,或者是一个符号。
关键字(32个)
关键字 |
说明 |
auto |
声明自动变量 |
break |
跳出当前循环 |
case |
开关语句分支 |
char |
声明字符型变量或函数返回值类型 |
const |
定义常量,如果一个变量被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新增关键字
_Bool _Complex _Imaginary inline restrict//好像就是也没啥用但是不让用?
C11 新增关键字
_Alignas _Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local
标识符
c标识符是用来标识变量、函数、或任何其他用户自定义项目的名称。一个标识符以字母A-Z或者a-z或者下划线_开始,后面跟字母、下划线或数字。标识符中不允许出现标点字符(@ ¥ %),区分大小写。
符号
分号
每个语句必须以分号结束。
注释
//第一种 单行注释
/*
第二种 多行注释
*/
空格
没啥可讲的。
C数据类型
变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
序号 |
类型与描述1 |
1 |
基本类型: |
2 |
枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。 |
3 |
void 类型: 类型说明符 void 表明没有可用的值。 |
4 |
派生类型: 它们包括:指针类型、数组类型、结构类型(数组、结构类型统称为聚合类型)、共用体类型和函数类型。 |
整数类型
类型 |
存储大小 |
值范围//这我觉得我背不来啊先放放! |
char |
1 字节 |
-128 到 127 或 0 到 255 |
unsigned char |
1 字节 |
0 到 255 |
signed char |
1 字节 |
-128 到 127 |
int |
2 或 4 字节 |
-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int |
2 或 4 字节 |
0 到 65,535 或 0 到 4,294,967,295 |
short |
2 字节 |
-32,768 到 32,767 |
unsigned short |
2 字节 |
0 到 65,535 |
long |
4 字节 |
-2,147,483,648 到 2,147,483,647 |
unsigned long |
4 字节 |
0 到 4,294,967,295 |
各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。
以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小
#include <stdio.h>
#include <limits.h>
int main()
{
printf("int 存储大小 : %lu ", sizeof(int));
return 0;
}
浮点类型
下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:
类型 |
存储大小 |
值范围 |
精度 |
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 定义了宏u1s1一直不知道啥是宏,等我悄咪咪去查一下,在程序中可以使用这些值和其他有关实数二进制表示的细节。下面的实例将输出浮点类型占用的存储空间以及它的范围值:
#include <stdio.h>
#include <float.h>
int main()
{
printf("float 存储最大字节数 : %lu ", sizeof(float));
printf("float 最小值: %E ", FLT_MIN//就单纯不知道啥意思 float.h头文件里定义的吗 );
printf("float 最大值: %E ", FLT_MAX );
printf("精度值: %d ", FLT_DIG );
return 0;
}
void 类型//不知道void类型还有这么多絮絮叨叨的
void 类型指定没有可用的值。它通常用于以下三种情况下:
序号 |
类型与描述 |
1 |
函数返回为空 |
2 |
函数参数为空 |
3 |
指针指向 void |
C 变量
变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的。
类型 |
描述 |
char |
通常是一个字节(八位)。这是一个整数类型。 |
int |
对机器而言,整数的最自然的大小。 |
float |
单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。 |
double |
双精度浮点值。双精度是1位符号,11位指数,52位小数。 |
void |
表示类型的缺失。 |
C 中的变量定义
定义格式 type variable_list;
定义并声明格式 type variable_list = value;
不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。
C 中的变量声明
- 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。
- 2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。 例如:extern int a 其中变量 a 可以在别的文件中定义的。extern int i; //声明,不是定义
int i; //声明,也是定义
// 函数外定义变量 x 和 y
int x;
int y;
{
//函数内声明变量 x 和 y 为外部变量
extern int x;
extern int y;
}
如果需要在一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的文件中将变量加上 extern 关键字的声明即可。
addtwonum.c 文件代码:
#include <stdio.h>
/*外部变量声明*/
extern int x ;
extern int y ;
int addtwonum()
{
return x+y;
}
test.c 文件代码:
#include <stdio.h>
/*定义两个全局变量*/
int x=1;
int y=2;
int addtwonum();
int main(void)
{
int result;
result = addtwonum();
printf("result 为: %d ",result);
return 0;
}
//不太明白
当上面的代码被编译和执行时,它会产生下列结果:
$ gcc addtwonum.c test.c -o main
$ ./main
result 为: 3
C 中的左值(Lvalues)和右值(Rvalues)
C 中有两种类型的表达式:
- 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。【变量是左值,可以放在赋值号的左边】
- 右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。【常量是右值,只能放在赋值号的右边】