C语言概念
C语言是一门计算机语言,计算机语言又是人和计算机进行交流的语言
包括C/C++/Java/python等。
main函数
main函数:又称为主函数,是程序的入口,有且只有一个。
内置类型
内置类型及32位平台下所占内存大小
char sizeof(char)=1
short sizeof(char)=2
int sizeof(char)=4
long sizeof(char)=4
long long sizeof(char)=8
float sizeof(char)=4
double sizeof(char)=8
变量
变量 | 全局变量 | 局部变量 |
---|---|---|
定义 | 定义在代码块之外 | 定义在代码块之内 |
作用域 | 整个工程 | 变量所在的局部范围 |
生命周期 | 整个程序的生命周期 | 进入作用域生命周期开始,出作用域生命周期结束 |
生命周期:变量从创建到销毁的一段时间
注意1:放在main函数内部的变量是局部变量,但局部变量不全都是放在main函数内部的,只要定义在代码块之内,都是局部变量
注意2:局部变量和全局变量尽量不要用相同的名字,容易产生误会或产生bug,当产生冲突的时候,以局部变量优先
常量
1、字面常量:可以直接写出值的常量,比如3.14
2、const修饰的常变量:const(常属性),const int a=8;使得a成为了具备常属性的变量,本质是变量,因此a是常变量
3、#define定义的标识符常量:# define MAX 10
4、枚举常量:一一列举的常量,枚举关键字是enum
enum Sex
{
M,
F,
S
};
枚举常量的值不能更改
int main()
{
enum Sex s=M;
s=F; //正确的
F=4; //错误的
}
字符串
由双引号引起的一串字符,字符串可以存放到字符数组中
char arr1[]=“abc”;
char arr2[]={'a','b','c'};
printf("%s\n",arr1);
//输出abc
printf("%s\n",arr2);
//输出abc+乱码,因为没有结束标志
char arr2[]={'a','b','c',0};
char arr1[]=“abc”; //两者输出结果均为abc
字符串“abc” 中包含’a’ ‘b’ ‘c’ ‘\0’四个字符,’\0’是字符串的结束标志,但不属于字符串的内容
char arr1[]=“abc”;
char arr2[]={'a','b','c'};
printf("%d\n",strlen(arr1));
//输出 3 ,遇到 \0 立即停止
printf("%d\n",strlen(arr2));
//输出 随机值,看什么时候遇到 \0
转义字符
转变原来意思的字符,有很多,常用的是\n
选择语句
if else
循环语句
while(条件为真)
{
循环条件;
}
条件为假,即跳出循环
函数
函数分为库函数和自定义函数
数组
一组相同元素的集合
定义一个存放多少个什么类型字符或数字的数组,数组下标从0开始,以下标方式访问元素
操作符
算数运算符、移位操作符、位操作符、赋值操作符、单目操作符(双目操作符、三目操作符)、关系操作符(比较)、逻辑操作符、条件操作符(表达式1 ? 表达式2 : 表达式3)、逗号表达式(表达式1 , 表达式2 …)、[]下标引用操作符等
sizeof
sizeof是一个操作符,不是函数,因为函数后面的( )不可省略,而sizeof后面的( )是可以省略的。
sizeof()计算的是变量/类型所占空间的大小,单位是字节
sizeof(变量)时,括号可省略;
sizeof(类型)时,括号不可省略;
sizeof(arr)时,计算数组大小,单位是字节,如果是int arr[6],则sizeof=4*6=24字节,int型一个元素是4字节
数组元素个数=sizeof(数组)/sizeof(arr[0])
arr[0]:数组每个元素的大小,每个元素大小均相同,可选第一个元素
++
后置++ 先使用,再++
前置++ 先++ 再使用
前置-- 先使用,再–
后置-- 先-- 再使用
原码、反码、补码
~a 表示按位取反(二进制)
如果int a=0; ~b=-1
原因如下:
a 00000000 00000000 00000000 00000000 按位取反后得到
~b 11111111 11111111 11111111 11111111 负数在内存中存储的时候,存储的是二进制的补码
负数:
原码 ->按位求反 -> 反码 -> 末尾+1 -> 补码
补码 -> 末尾-1 -> 反码 -?按位求反 -> 原码
~b-1 11111111 11111111 11111111 11111110
按位求反 10000000 00000000 00000000 00000001
所以为-1 第一位为符号位
static关键字
static int a=1;
static修饰局部变量,使得局部变量的生命周期变长
static修饰全局变量,改变了变量的作用域,让静态的全局变量只能在自己所在的源文件内部使用,出了源文件就没法再使用了
static修饰函数,改变了函数的链接属性,外部链接属性->内部链接属性,函数具有外部链接属性时,在使用之前进行函数声明即可
宏
宏的定义 #define MAX(X,Y) (X>Y?X:Y)
宏在main函数中的使用方式:max=MAX(a,b);
指针
int a=10;
printf("%p\n",&a);
//&a是取地址操作,打印整型变量a的地址
int a=10;
int* p=&a;
// 指针变量p的类型是int * int表示p指向的a是int类型
printf("%p\n",p);
*p=20;
//*为解引用操作符(或者叫间接访问操作符)
结构体
针对复杂对象
struct Book
{
char name[20]; //C语言
short price; //55
};
int main()
{
//利用结构体类型 - 创建一个该类型的结构体变量
struct Book b1={"C语言",55};
struct Book* pb=&b1; //利用pb打印出书名和价格
printf("书名:%s\n",b1.name);
printf("价格:%d\n",b1.price);
return 0;
}
结构体变量.成员
结构体指针->成员