适合学过c,但很久没用了的人,想要快速上手c。(这种情况也可以去看菜鸟教程)
1. 简洁
- 所有C语言都需要包含main()函数。代码从Main()函数开始执行
- stdio是一个头文件(标准输入输出头文件),#include是一个预处理命令,用来引进头文件。printf()函数在头文件“stdio.h”文件中声明
- return 0;语句用于表示退出文件。
- C语言程序写在一个或多个扩展名为“.c”的文本文件中
2. 基本语法
- 分号——是每个语句的结束符。
- 标识符——以字母、数字和下划线组成,不能以数字开头。
- C语言有≥和≤操作符
- 位运算符:按位与——&,按位或——|,亦或——^,取反——~,二进制左移运算符——<<,二进制右移运算符——>>
- &:返回变量的地址
- *****:指向一个变量
- boolean expression ? X:Y是条件表达式,如果条件为真 ? 则值为 X : 否则值为 Y
-
数据类型:
- 基本类型:
- 是算术类型,包括整数类型和浮点类型
- ①整数类型有char——1字节,short——2字节,int——2或4字节,long——4字节
- ②浮点类型有float——4字节,double——8字节,long double——16字节
- 枚举类型,也是算术类型,用来定义在程序中只能赋予其一定的离散整数值的变量。
- void类型,void表明没有可用的值。
- 派生类型,包括指针类型、数组类型、结构类型、共用体类型和函数类型。
- 基本类型:
-
用sizeof(type)方法得到对象或类型的存储字节大小。
-
C变量,常用的有以下几种
- char,通常是1个字节
- int,4个字节
- float,单精度浮点数,4个字节。1bit符号位,8bit指数位,23bit小数位
- double,双精度浮点数
-
C常量
-
如何定义一个常量
-
用 const 关键字
// const声明常量必须要在一个语句内,包括名称和值 const type variable = value; // 例 const char c = 'a';
-
-
使用 #define 预处理器
// 在main()函数之前 #include <stdio.h> #define LENGTH 10 #define WIDTH 5 #define NEWLINE '\n' int main() { int area; area = LENGTH * WIDTH; printf("value of area : %d", area); printf("%c", NEWLINE); return 0; }
- 整数部分
- 前缀 0x 或 0X 表示十六进制
- 前缀 0 表示八进制
- 无前缀表示十进制
- 后缀 U / u 表示无符号整数(unsigned)
- 后缀 L / l 表示长整数(long)
-
浮点数
- 浮点小数带小数点 或 “小数部分 E 指数部分”
- 后缀f表示单精度浮点数
-
字符常量
-
字符常量的 ASCII 值可以通过强制类型转换转换为整数值
char c = 'a'; int cToInt = (int) c; // cToInt值为97
-
字符串常量包括在双引号" "中
-
\为转义字符,\n为换行符,\t为制表符
-
-
3. static、extern
-
static 修饰符,指示编译器在程序的生命周期内保持局部变量的存在,也可应用于全局变量,使变量的作用域限制在声明它的文件内。
#include <stdio.h> /* 函数声明 */ void func1(void); static int count=10; /* 全局变量 - static 是默认的 */ int main() { while (count--) { func1(); } return 0; } void func1(void) { /* 'thingy' 是 'func1' 的局部变量 - 只初始化一次 * 每次调用函数 'func1' 'thingy' 值不会被重置。 */ static int thingy=5; thingy++; printf(" thingy 为 %d , count 为 %d\n", thingy, count); }
输出为:
thingy 为 6 , count 为 9 thingy 为 7 , count 为 8 thingy 为 8 , count 为 7 thingy 为 9 , count 为 6 thingy 为 10 , count 为 5 thingy 为 11 , count 为 4 thingy 为 12 , count 为 3 thingy 为 13 , count 为 2 thingy 为 14 , count 为 1 thingy 为 15 , count 为 0
- extern 存储类用于定义在其他文件中声明的全局变量或函数。当使用 extern 关键字时,不会为变量分配任何存储空间,而只是指示编译器该变量在其他文件中定义。
- extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
- 当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。
- extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候,如下所示:
-
第一个文件:main.c
#include <stdio.h> int count ; extern void write_extern(); int main() { count = 5; write_extern(); }
-
第二个文件:support.c
#include <stdio.h> extern int count; void write_extern(void) { printf("count is %d\n", count); }
-
输出
count is 5
4. switch
-
switch语句的语法
switch(expression){ case constant-expression : statement(s); break; /* 可选的 */ case constant-expression : statement(s); break; /* 可选的 */ /* 您可以有任意数量的 case 语句 */ // default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。 default : /* 可选的 */ statement(s); }
5. 函数
-
定义函数:
return_type function_name( parameter list ) { body of the function }
-
函数的声明:
return_type function_name( parameter list );
6.数组
// 声明数组: type arrayName [ arraySize ];
// 声明一个数组
double balance[10];
// 声明并初始化一个数组
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
// 从函数返回数组
int * myFunction()
{
int a[10];
//一顿操作
return a;
}
int main ()
{
/* 一个指向整数的指针 */
int *b;
b = myFunction();
}
7. 枚举enum
-
枚举类型的定义
/* 枚举类型的定义格式: * enum 枚举名 {枚举元素1,枚举元素2,……}; */ // 例 enum DAY { // 第一个枚举成员的默认值为整型的 0 MON=1, TUE, WED, THU, FRI, SAT, SUN // 后续枚举成员的值在前一个成员上加 1 };
-
枚举变量的定义
-
先定义枚举类型,再定义枚举变量
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day;
-
定义枚举类型的同时定义枚举变量
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;
-
省略枚举名称,直接定义枚举变量
enum { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;
-
-
在一些特殊的情况下(枚举类型连续),以下实例使用 for 来遍历枚举的元素:
// 在C语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的 #include <stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day; int main() { // 遍历枚举元素 for (day = MON; day <= SUN; day++) { printf("枚举元素:%d \n", day); } }
8. 指针
-
指针类型对象是一个地址,前面加个*是访问地址对应的变量的【值】
-
指针变量声明的一般形式为:
type *var_name;
-
例子:
#include <stdio.h> int main () { int var = 20; /* 实际变量的声明 */ int *ip; /* 指针变量的声明 */ ip = &var; /* 在指针变量中存储 var 的地址 */ printf("var 变量的地址: %p\n", &var ); /* 在指针变量中存储的地址 */ printf("ip 变量存储的地址: %p\n", ip ); /* 使用指针访问值 */ printf("*ip 变量的值: %d\n", *ip ); return 0; }
9. 字符串
-
本质:在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。
-
所以字符串数组的空间长度总比字符串中包含的字母数多1个。
-
字符串的操作方法:(注意!预处理中要写 #include<string.h>)
- strcpy(s1,s2); // 复制字符串s2到s1
- strcat(s1,s2); // 连接字符串s2到s1的末尾
- strlen(s1); // 返回字符串s1的长度
- strcmp(s1,s2); // 比较s1和s2,如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0,相等返回0
- strchr(s1, ch); // 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置
- strstr(s1, s2); // 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
10. 结构体
-
成员访问运算符(.)
-
struct语句的格式如下
struct tag { // tag 是结构体标签 member-list // member-list 是标准的变量定义,比如 int i; 或者 float f;,或者其他有效的变量定义 member-list member-list ... } variable-list ; // variable-list 结构变量,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。
-
例子
#include<stdio.h> struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main(){ Books books[3] = {{"a", "a1", "a2", 1},{"b", "b1", "b2", 2},{"c", "c1", "c2", 3}}; for(int i = 0 ;i<3;i++){ printf("title : %s\tauthor: %s\tsubject: %s\tbook_id: %d\n", books[i].title, books[i].author, books[i].subject, books[i].book_id); } return 0 ; } // 输出 title : a author: a1 subject: a2 book_id: 1 title : b author: b1 subject: b2 book_id: 2 title : c author: c1 subject: c2 book_id: 3