目录
1.什么是C语言?
C语言是一门通用计算机编程语言,广泛应用于底层开发。
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程 语言。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
简单的C语言指令:
#include<stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
2.数据类型
数据类型 | 打印符号 | 数据类型大小/byte | |
字符数据类型 | char | %c(字符) / %s(字符串) | 1 |
短整型 | short | %d | 2 |
整形 | int | %d | 4 |
长整型 | long | %d | 4 |
更长整型 | long long | %d | 8 |
单精度浮点数 | float | %f | 4 |
双精度浮点数 | double | %lf | 8 |
//查看数据类型大小的代码
#include <stdio.h>
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
return 0;
}
sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。
sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
sizeof 的使用形式: sizeof (type)
例如:sizeof(int)
3.变量和常量
变量 | 常量 | |||||
定义 | 在C语言中是指可变的值 | 在C语言中是指不变的值 | ||||
分类 | 局部变量 | 全局变量 | 字面常量 | const修饰的常量 | #define定义的标识符常量 | 枚举常量 |
鉴别方法 | 是指在 { } 内的变量 | 是指在 { } 外的变量 | 常数(3.14) | const a = 4 | #define MAX 100 | enum +常量名 例: (enum Sex { MALE, FEMALE. SECRET } ) |
同名优先级 | 当局部变量和全局变量同名的时候,局部变量优先使用 | |||||
作用域 | 变量所在的局部范围 | 整个工程 | ||||
生命周期 | 进入作用域生命周期开始,出作用域生命周期结束 | 整个程序的生命周期 | ||||
举例 | |
4.字符串、转义字符和注释
由双引号 (Double Quote) 括起来的一串字符称为字符串的字面值 (String Literal) ,或者简称字符串
#include<stdio.h>
#include<string.h>
int main()
{
char arr1 ="Hello world!";
char arr2 ={'1','2','3'};
char arr3 ={'1','2','3','\0'}
printf("%s\n",arr1);
printf("%s\n",arr2);
printf("%s\n",arr3);
printf("arr1=%d\n",sizeof(arr1));
printf("arr2=%d\n",sizeof(arr2));
printf("arr3=%d\n",sizeof(arr3));
printf("arr1=%d\n",strlen(arr1));
printf("arr2=%d\n",strlen(arr2));
printf("arr3=%d\n",strlen(arr3));
return 0;
}
//字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串
内容。
转义字符 | 释义 |
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\' | 用于表示字符常量' |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。 如: \130 X |
\xdd | dd表示2个十六进制数字。 如: \x300 |
注释:
1.代码中有不需要的代码可以直接删除,也可以注释掉
2.代码中有写代码比较难懂,可以加一下注释文字
比如
#include <stdio.h>
int Add(int x, int y)
{
return x+y;
}
/*C语言风格注释
int Sub(int x, int y)
{
return x-y;
}
*/
int main()
{
//C++注释风格
//int a = 10;
//调用Add函数,完成加法
printf("%d\n", Add(1, 2));
return 0;
}
代码注释风格 | |
C语言风格的注释 | /*xxxxxx*/ 缺陷:不能嵌套注释 |
C++的风格注释 | //xxxxxxx 可以注释一行也可以注释多行 |
5.选择语句
C语言中选择语句最广为人知的就是 if 语句,用法如下:
#include <stdio.h>
int main()
{
int coding = 0;
printf("你愿意嫁给我吗?(选择1 or 0):>");
scanf("%d", &coding);
if(coding == 1)
{
prinf("愿意\n");
}
else
{
printf("不愿意\n");
}
return 0;
}
/*
#include<stdio.h>
int main()
{
int score=0;
printf("请输入你的学习成绩:>");
scanf("%d",&score);
if(score>=90)
{
printf("评价:优秀\n");
}
else if(score>=80 && score<90)
{
printf("评价:良好\n");
}
else if(score>=60 && score<80)
{
printf("评价:及格\n");
}
else
{
printf("不及格!!!\n");
}
return 0;
}
*/
然后还有多分支语句switch,用法如下:
#include<stdio.h>
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
pirntf("工作日\n");
break;
case 6:
case 7:
printf("周末\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
6.循环语句
C语言中循环语句有:
while(条件表达式)
{循环体}
#include<>
int main()
{
int a=0;
while(a<10)
{
printf("%d\n",a);
a++;
}
return 0;
}
for(条件表达式)
{循环体}
#incldue<stdio.h>
int main()
{
int i=0;
for(i=1;i<10;i++)
{
printf("%d\n",i);
}
return 0;
}
do
{循环体}while(条件表达式)
#include<stdio.h>
int main()
{
int a=0;
do
{
printf("%d\n",a);
}while(a<10);
return 0;
}
7.函数
C语言中函数由函数角度可分为库函数和自定义函数
库函数即C语言自带的函数,加上头文件可以直接使用,例
#include<stdio.h>
#include<string.h>
int main()
{
int a =24;
pirntf("%d\n",strlen(a));//这里的strlen函数的头文件是 #include<string.h>
return 0;
}
自定义函数就是程序员自己定义的函数,例
#include<stdio.h>
int SUM(int x,int y) //这个就是自定义的一个简单的函数
{
int a=0;
a=x+y;
return a;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
int sum=SUM(a,b);
printf("sum=%d",sum);
return 0;
}
8.数组
C语言中给了数组的定义:一组相同类型元素的集合
int arr[10]={0,1,2,3,4,5,6,7,8,9};
C语言规定数组的每个元素都有一个下标,下标是从0开始的。
int arr[9] | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
数组的运用:
#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
9.操作符
算术操作符
+ - * / %
移位操作符
>> <<
位操作符
& ^ |
赋值操作符
= += -= *= /= &= ^= |= >>= <<=
单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 简介访问操作符(解引用操作符)
(类型) 强制类型转换
关系操作符
>
>=
<
<=
!=
==
逻辑操作符
&& ||
条件操作符
exp1 ? exp2 : exp3
逗号表达式
exp1,exp2,exp3,..expn
下标引用、函数调用和结构成员
[] () . ->
10.常见关键字
break continue switch case default char int short long float double if else for
这里只是列举几个,后面再详细介绍有哪些关键字和用法
11.#define 定义常量和宏
//define定义标识符常量
#define MAX 1000
//define定义宏,与函数类似
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
int sum = ADD(2, 3);
printf("sum = %d\n", sum);
sum = 10*ADD(2, 3);
printf("sum = %d\n", sum);
return 0;
}
12.指针
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地 址。
每个变量都有地址,存储地址则需要定义指针变量。
指针大小在32位平台是4个字节,64位平台是8个字节。
13.结构体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
比如描述书本,书本包含: 书名,价格和书号等 这几项信息。
这里只能使用结构体来描述了。
struct book
{
char name[20];
double price;
char num[10];
}
初始化
struct book b1={"数据结构",34.5,"s234353df"};
访问
printf("name=%s price=%lf num=%s",b1.name,b1.price,b1.num);