P1.认识C语言
第一个C语言程序
long 长整型 long long 更长的整型
变量的作用域和生命周期
作用域
作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的。
而限定这个名字的可用范围的代码范围就是这个名字的作用域。 能在哪里用,那里就是作用域。
局部变量的作用域就是其所在的代码块 “{}” 中。
全局变量的作用域是整个工程。
生命周期
局部变量的生命周期是:进入作用域开始,出作用域结束。
全局变量的生命周期是:整个程序的生命周期。
常量的种类
字面常量:直接书写的常量
const修饰的常量:const--常属性 变量名前加上const后变为一个常变量。
#define定义的标识符常量:
枚举常量:枚举--一一列举 关键字enum
MALE 、FEMALE 、SECRET为枚举常量 默认值为0/1/2。
字符串+转义字符+注释
\0 字符串的结束标志,是一个转义字符,ASCII码值是和 0 等价(从值上看是等价于0的)
EOF :文件结束标志,值是-1.
在C中,用“”定义字符串时自动添加\0,用{‘’,‘’,‘’}不自动添加\0
在C++中,二者均自动添加\0
关键字 strlen----英文string length 统计字符串长度
转义字符
\n换行符 \t 水平制表符
注释
略
选择语句
if 和else
循环语句
while:
for:
do while:
函数
数组
操作符
移位操作符
右移和左移操作
二进制位向左移动x位,左边丢弃,右边补0
位操作符
&:“与”运算 |:或运算 ^:异或 a^b 二进制位相同取“1”,不同取“2”
取地址
赋值操作符
单目操作符
单目:只有一个操作对象 如 -a
原码符号位不变其他位取反=反码,反码+1=补码,补码-1=反码,反码符号不变其他取反=原码。
整数在内存中都是补码,反码只是计算时的一个中间状态, 正数的原码反码补码都是它本身。
为什么内存存补码?--------负数取补码后与正数进行加减运算的二进制结果就是十进制结果。
双目:有两个操作对象 如 a+b
三目
关系操作符
运算符
逻辑运算符
条件运算符
a>b?max=a : max=b; ?前面的表达式为真,执行:前面的语句,反之执行:后面的语句。
逗号表达式
下标引用、函数调用和结构成员
库函数
strcpy----string.h :
结构体的成员变量为数组时,若要更换内容,无法直接替换,因为name本身时数组的地址。
此时需要用strcpy 来进行字符串拷贝。
常见关键字
auto:
consit:将变量转换为常变量。
extern:
引入/声明外部符号(变量、函数)。
register:寄存器关键字
static:改变作用域
修饰局部变量时,静态局部变量第一次被初始化。之后再函数调用时不在被初始化,生命周期变长。
修饰全局变量时,将全局变量变成私有变量,让全局变量只能在自己所在源文件内部使用。
修饰函数时,改变了函数的链接属性,普通函数具有外部链接属性,被static修饰后变成内部链接属性。
struct:结构体
switch/case:
typedef:类型定义 - 类型重定义 给类型重新起个名字
之后 u_int 等于 unsigned int
#define:定义常量和宏。
union:联合体/共用体
volatile:
sizeof计算字节 strlen计算字符串个数
计算机存储数据
1、硬盘 2、内存 3、高速缓存 4、寄存器
指针
内存
为了有效的使用内存,把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
%p打印地址。 &a:取地址 *p:解引用/间接访问操作符,直接找到p这个地址 此时打印a的值为20。
定义结构体指针 struct 变量名* 指针名
指针变量的大小
32位机器指针大小为4 byte 64位机器指针大小为 8byte
结构体