注:学习参考视频为b站鹏哥教程
stdio standard input output 标准输入输出
main函数 程序入口 有且仅有一个
数据类型
(字节数byte 1字节8比特位 1kb 1024byte mb gb tb)
char 字符 1
short 短整型 2
int 整型 4
long 长整型 4/8
long long 更长的整型 8
float 单精度浮点数 4
double 双精度浮点数 8
占位符
%c 打印字符格式的数据
%d 打印整型十进制数据
%f 打印浮点型
%p 以地址形式打印
%x 打印十六进制数字
%s打印字符串
\n换行
printf("%c\n" , char);
printf("sum = %d\n" , sum);
作用域与生命周期
作用域:起作用的范围
局部变量作用域:所在的代码块P{}
全局变量作用域:整个工程(声明)
extern int g_val
生命周期:从起作用到不起作用
局部变量生命周期:进入作用域开始,出作用域结束
全局变量生命周期:整个程序
常量与变量
变量
全局变量:定义在{}之外的变量
局部变量:定义在{}之内的变量,只可以在此括号内使用
全局变量和局部变量名字建议不要相同,容易产生bug,相同时局部变量优先
#include <stdio.h>
int num1=0;
int num2=0;
int sum=0;
scanf("%d%d", &num1 , &num2)//scanf输入函数;&取地址符号,将num1,2分别放入地址处
sum = num1 + num2;
C语言语法定义:变量要定义在代码块的最前面
常量
1.字面常量
3
2.const 修饰的常变量
const:常属性 不能发生改变
本质是变量,但是具有常量属性
int n = 10;
int arr[n] = {0};
报错,arr[]中必须为常量,不能为变量,const修饰的常变量也不行
3.#define 定义的标识符常量
#define MAX 10
int arr[MAX] = {0};
4.枚举常量
枚举关键 enum
常量意为enum中定义的枚举常量为不能修改的常量
而通过这个枚举常量创建的变量是可以修改的(比如下面的s)
enum Sex
{
MALE,
FEMALE,
SECRET//枚举常量 打印会发现默认为0,1,2,有值且不可被改变
}
int main()
{
enum Sex s = MALE;
return 0;
}
字符串
双引号引起的一个东西,也可以是空字符串
%s打印字符串
字符为ASCII编码 字符对应的值为ASCII码表
\0是字符串的结束标志,非常重要
char arr1[] = "abc";//"abc"--'a','b','c','\0'
//\0值为0,为字符串的结束标志
char arr2[] = {'a','b','c'};
char arr3[] = {'a','b','c',0};//arr1=arr3
char arr4[] = {'a','b','c','\0'};
printf("%s\n",arr1);//abc
printf("%s\n",arr2);
printf("%s\n",arr3);
printf("%d\n",strlen(arr1));//3,遇到结束标志停止,计算长度时\0不计数
printf("%d\n",strlen(arr2));//随机值,因为没有结束标志,后面是什么我们是不清楚的
//strlen-- string.h
转义字符
(长度为1)
\0 为转义字符(加\转变原来的意思)
\n 是换行
\t 是水平制表符 tab键 直接加水平制表符空间的大小
??+) 为三字符词 故在每个问好前加\,转义使得?成为普通问号
\ \ 可消除转义,即转义再转义变为普通\
\ ’ 即为普通引号
\ddd 表示1-3个八进制数字(0-7组成) 即ddd(八进制数字)对应的十进制数字的ASCII码字符
\32 //32-->26-->ASCII(→)
\xdd dd表示两个十六进制数字
注释
//
/* */ 不可嵌套注释
注释快捷键:ctrl+K+C
取消注释快捷键:ctrl+K+U
选择语句
int input = 0;
scanf("%d", %input);
if(input == 0)
printf();
else
printf();
//if else 不加{}时只跟后面一句
循环语句
if
while
函数
数组
一组相同类型元素的集合
下标默认从0开始,可访问元素
int arr[10];//定义一个存放10个整数数字的数组
int arr[2] = {0,1};
操作符
运算
+ - * / (除以得商) %(取模,除以得余数)
移位
<< 左移 >>右移
左移n位=乘2^n
右移n位=除以2^n
位操作(2进制)
&按位与
|按位或
^按位异或:相同为0,相异为1
赋值操作符
=
+= -= *= /= &= ……= |= >>= <<=
单目操作符
!(0为假,非0为真,取反得到的结果为0/1)
+ - &(取地址)
sizeof 计算的是变量或类型所占的空间大小,单位是字节
sizeof(int) //4
int arr[10] = {0};
sizeof(arr) //40
sizeof(arr)/sizeof(arr[0]) //数组元素个数
~ 二进制按位取反
原码、反码、补码
原码按位取反=反码,反码+1=补码
负数在二进制中存储的是补码
使用的打印的是数字的原码
int a = 0;
int b = ~a;
++ – 前置 后置
int a = 10;
int b = a++;
int c = ++a;
//a = 12,b = 10, c = 12
*解引用操作符(间接访问操作符)
(类型) 强制类型转换
关系操作符
> >= < <= != ==
逻辑操作符
&& 逻辑与
|| 逻辑或
条件操作符
exp1 ? exp2 : exp3
exp1是否为真,为真则该表达式为exp2,为假则该表达式的值为exp3
逗号表达式
exp1, exp2, exp3, …expN
下标引用、函数调用和结构成员
[] () . ->
常见关键字
auto break case char const(常变量) continue default do double else enum(枚举)
extern float for goto if int long register return short signed
sizeof static struct(结构体) switch typedef(类型定义) union unsigned(无符号) void volatile while
define不是关键字,是预处理指令
不能自己创建,不能做变量
typedef
typedef unsigned int uint_32
unsigned int num1
uint_32 num2
//两个变量类型一致
static(静态)
- 修饰局部变量,改变变量的生命周期,使得静态局部变量出了作用域也存在,直到程序结束
- 修饰全局变量,只能在本源文件使用,不可以在其他源文件使用
- 修饰函数,只可在本源文件中使用
- 修饰的变量可以改变
#define定义常量和宏
#define MAX 100
#define ADD(X,Y) ((X)+(Y))//一般不使用定义宏,宏为直接替换,如果必须使用则所有变量都加括号,以免因运算优先级导致结果错误,无法查错
指针
用来存放地址的变量
内存
每个内存单元 1字节 内存单元的编号为内存单元的地址
指针为存储地址的变量
&取地址操作符 占位符为%p
*p * 为解引用操作符,也叫间接引用操作符
为p里的地址位置中的值
int a = 10;
int* p = &a;//p为指针变量--指针变量 p指向的对象是整型
*p = 20;//a = 20;
double d = 3.14;
double* pd = %d;
//double打印占位符为%lf
指针变量的大小
32位平台 即32bit 即4byte 指针变量大小为4字节
64位为8字节
结构体
自己创造出来的一种类型
struct Book
{
char name[20];
short price;
};
int main()
{
struct Book B1 = {"C语言",55};
printf("书名:%s\n",B1.name);//点操作符从结构体变量指向内容,B1.price
B1.price = 23;
strcpy(B1.name,"C教程");//修改字符串,使用string.h里的strcpy函数,即将右边的字符串拷贝到左边的字符串
struct Book* pb = &B1;
printf("%s\n",(*pb).name); //点操作符从结构体变量指向内容
printf("%s\n",pb->name); //箭头操作符,从结构体指针指向内容
return 0
}

1540

被折叠的 条评论
为什么被折叠?



