1.什么是C语言
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译,处理低级存储器,产生少量的机器码以及不需要任何运行环境的支持便能运行的编程语言。
2.第一个C语言程序
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
3.数据类型
类型 | 字节大小 |
---|---|
char | 1 |
short | 2 |
int | 4 |
long | 4 |
long long | 8 |
float | 4 |
double | 8 |
4.变量 常量
定义变量 类型+变量名
例如:int age = 150;
变量分类
全局变量 局部变量
注意:当全局变量和局部变量名字相同时,以局部变量优先。
变量的作用域
1.局部变量的作用域是变量所在的局部范围;
2.全局变量的作用域是整个工程。
生命周期
(变量的生命周期指变量的创建到变量的销毁之间的一个时间段)
1.局部变量的生命周期是进入作用域生命周期开始,出作用域生命周期结束。
2.全局变量的生命周期是整个程序的生命周期。
常量
1.字面常量
2.const修饰的常变量
3.#define定义的标识符常量
4.枚举常量
const float pai = 3.14f;
pai = 5.14;
上述中因为pai 是被const修饰的,所以pai 的最终结果还是3.14f,不受后面一步影响。
enum Sex
{
MALE;
FEMALE;
SECRET;
};
上述中enum 为定义枚举常量的关键字,大括号内的极为枚举常量。(若未给其赋值,则从第一个开始默认为0,其他依次加一)
5.字符串 转义字符 注释
字符串
定义 由双引号引起来的一串字符(字符串的结束标志是\0的转义字符,在计算字符串长度的时候,不算做字符串内容。)
#include<stdio.h>
int main()
{
char arr1[] = "bit";
char arr2[] = { 'b','i','t' };
char arr3[] = { 'b','i','t','\0'};
printf("%s\n",arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
如上图,第二种结果是由于c的后面没有值,而遇到\0才结束,所以计算机就给了随机值。
转义字符
\? | 在书写多个问号时使用,防止被解析成三字母词 |
---|---|
\’ | 用于表示字符常量‘ |
\" | 用于表示一个字符串内部的双引号 |
– | – |
\\ | 用于表示一个反斜杠,防止他被解释为一个转义序列符 |
\a | 警号字符,蜂鸣 |
\n | 换行 |
\b | 退格符 |
\f | 进纸符 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。如:\130X |
\xdd | dd表示2个十六进制数字。如\x300 |
#include<stdio.h>
int main()
{
printf("%d\n",strlen("c:\test\328\test.c"));
return 0;
}
之所以为14,就是因为转义字符,一个转义字符算一个。
注释
1。不需要的代码可以删除,也可以注释;
2.代码中有些难懂的代码,可以注释文字。
注释风格
1.C语言注释风格:/xxxxx/
缺陷:不能嵌套注释
2.C++注释风格:
//xxxxxx
可以注释一行,也可以多行。
6.选择语句
1.if
{
};
else
{
};
7.循环语句
1.while语句
2.for语句
3.do…while语句
8.函数
int add(int x, int y)
{
int z = x + y;
return z;
}
如图,括号里为参数,这是一个求和函数,可以在主函数中进行调用,函数返回值的类型和函数名前的类型相对应。
9.数组
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
定义一个整型数组,最多放10个元素,而且其下标是从0开始的,及arr[0]=1;
10.操作符
算术操作符 | +,-,*,/,% |
---|---|
移位操作符 | >>,<< |
位操作符 | &,^ |
赋值操作符 | =,+=,-=,*=,/=,&=,<<=,>>= |
单目操作符 | !,+,-,~,++,– |
关系操作符 | >,>=,<,<=,== |
– | – |
逻辑操作符 | && |
条件操作符 | exp1?exp2:exp3 |
逗号表达式 | exp1,exp2,exp3…expN |
下标引用,函数调用和结构成员 | [],(),->,. |
**1.移位操作符移的是二进制数的位置,例如:int a=8;int b=a>>1;则b=4;由…1000变为…0100。
2.位操作符用于二进制数的运算
&为有0则为0,都为1才为1;
^为相同为0,相异为1;
|为有1为1 ,都为0才为0.
11.常见关键字
auto,break,case,char,const,continue,default,do,double,else…
1.关键字typedef是类型定义,类型重命名
例如typedef unsigned int uint_32,则uint_32也是一个类型名。
2.关键字static用来修饰变量和函数
变为静态局部变量,静态全局变量,静态函数
修饰局部变量
#include<stdio.h>
void test()
{
static int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();
}
return 0;
}
#include<stdio.h>
void test()
{
int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();
}
return 0;
}
上述两种代码可知,static修饰局部变量改变了生命周期,让静态局部变量出了作用域依然存在,到程序结束。
修饰全局变量
全局变量被static修饰时,使得这个全局变量只能在本源文件内使用,不能在其他源文件里使用。
修饰函数
一个函数被修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。
12.指针
内存
是电脑上重要的存储器,计算机中所有的程序运行都是在内存中进行的。
所以为了有效使用内存,就把内存划分为一个个小的内存单元,每个内存单元的大小为1个字节。
为了能有效的访问到每个内存单元,就给内存进行了编号,这些编号被称为内存单元的地址。
内存分为栈区,堆区,静态区
栈区主要有局部变量,形式参数,
堆区主要有动态内存分配,malloc,realloc,calloc,free
静态区主要有全局变量和静态变量。
int num = 10;
int* p; //p为一个整型指针变量
p = # //p中存放的是num的地址
*p = 10; //*p相当于num
指针变量的大小
指针大小在32位平台是4个字节,在64位中是8个字节。
13.结构体
struct Stu
{
char name[20];
int age;
char sex[5];
char id[15];
};
struct 为结构体关键字,上述括号内为结构体成员。
结构体初始化
struct Stu s = { "张三",20,"男","20180101" };
访问结构体成员时,可以s.name。
也可以定义一个结构体指针如struct Stu *ps=&s;
则有ps->name;