C++ 面向过程 C语言 面向对象 但是C++中也有 面向对象 和过程
c++占位符::
%ld输出长整形格式 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值
(1) #define “” 与#define<>的区别
#define “” 是首先在指定的目录去寻找, 然后去系统盘寻找
#define <> 是直接去系统盘寻找
(2) C 的预处理命令
1) 宏的定义 #define
2) 条件编译
3) 文件包含
#include <包含的文件为头文件 以.h 结尾>
# include ""
关于的常量: 值不能被改变的量 意思是初始化的值
数值型常量 :(整形,浮点数)
字符型常量 :(字符,转义字符,字符串 )
符号:(#define 符号常量,常量值)
变量的定义: 值可以程序运行改变的量为变量
命名:c++ 规定标识符 由字符,数字,下划线开头 ,只能由字母,下划线开头
大小写敏感
不能使用关键字和保留字 (例如data, long,int 之类的)
常变量:
const 关键字(也就是我们说的指针)的变量,程序运行时 值 不可改变 称 常变量
一旦定义 不可改变
小说明:我们经常说的定义常量 其实是定义长变量 const bool hh =false;
C ++, C 的运算符
算数运算符: +-* /, i++,++i
值得注意也就只有 i++,++i的区别了 i++ 先运算 再自增 ++i 与之相反
关系运算符: < > == >= <= !=
需要注意的只有: == 比对的是值 不是地址
返回值是bool 值
逻辑运算符 && || ! 好记得话 可以说是 与 或 非
1) && 两边同真为真 同假为假 同生共死的味道
2) || 只要有一方为真 则为真
3) ! 取反值
位运算符 《 》 & | ^ ~
按位计算的二进制数字
1)按位左移 《 <<2 向左边 形象点说 (一条长凳 本来只有 0000 0011 四个人 但是现在从左边坐 两个人 22 数值改变为 0000 1122 )
2) 按位右移 《 <<2 向左边 形象点说 (一条长凳 本来只有 0000 0011 四个人 但是现在从右边坐 两个人 22 数值改变为 0000 0000 )
3)按位与 & 按位或 | 按位异或 按位取反
举例 举例 举例 举例
3&5 3 |5 3^5 ~3
3 0000 0011 0000 0011 0000 0011 0000 0011
5 0000 0101 0000 0101 0000 0101 1111 1100
左值和右值
Lvalue location value 地址(内存地址)量
Rvalue read value 读取
经常性的错误正确理解
在这块有个小的注意点
int A =4
if(A=4){
// 编译通过 在C 语言中 只有为0才为假 不为0就为真
}
if(4=A){
//报错
}
if(4==A){
//编译通过
复合赋值运算符:
+= -= *= /= %= 《= 》= &= ^= %=
还有 其他运算符
指针运算符
引用运算符和地址运算符 &
强制类型转换运算符 :(类型)
成员运算符. ::
程序语句 :
1.声明语句:
变量 int i=1;
2.执行语句:
1.控制语句
1)
if() {}else
for switch while do while
控制
continue ; 在for循环中
break; 终止语句
case;
go to 转向语句 c语言没有类的定义 只有在C++中才有类的定义 在C语言执行回调
return 从函数返回语句
loop: c语言中 loop 让语句有意义
2.函数和流对象调用语句‘
3.空语句
4.复合语句
指针: 首先要高清楚的两个概念 区别:
一个变量的指针 就是变量的地址
指针变量: 存放变量的地址的变量
指针的数据类型:
两种: * 指针运算符(间接访问运算符) int* p
& 取指针的运算符(地址运算符)int* a=(int*)&p;
变量与指针的关系:
数据类型 * 指针变量名 int* p (p是指针 不是* p)
2.引用的指针变量:
&a 变量a的地址 * p是 指针变量指向的内存单元
我来解释上面的图片 : 上图相当于一个内存条, 1,2,3,4,5,6代表的就是每一个指针变量也就是一个地址名称,圆圈1,2,3,4,5,6,7代表就是里面放的数据
我把上面的串一下
首先 int* p=1 *p代表的就是内存里面的内存单元1,int* a=(int*)&p; &p代表的是引用的地址
指针作为函数参数
void my(int* p1,int* p2) {
}
void my(p1,p2){
}
两者是等价的 int* p1是指针也可以作为参数
3.指针变量的数据类型
int i;i定义的整型变量;
int* p; p是指向整形数据的指针变量;
int p[n] ;定义整型数组p, 它有n个元素;
int* p[n];定义指针数组p,它由n个指向整形数据的指针元素组成
int (*p)[n];p是指向含n个元素一维数组的指针变量
int f() ;返回值是int的叫做f的函数
int* p(); 返回值是指针的叫做p的函数, 该指针指向整形数据的指针元素组成
int (*p) () ;p是指向函数的指针,该函数返回整形值
int * * p,p ; 是指向指针的指针变量,它指向一个指向一个指向整形数据的指针变量
数组与指针
1.指向数组元素的指针 :
在C++ 中 ,数组名代表数组中第一个元素的地址
int a[10]
int* p;
p=&a[0];
p=a;
2.用指针变量做函数接收数组地址
void my(int array[]);
void my(int* array);
5.函数与指针
函数在编译时被分配给一个入口地址,这个函数的入口地址就被称为函数的指针
1.用函数指针变量调用函数
int max(int x,int y)
int (*p)(int,int)
p=max;
int max;
int m;
m=p(1,2)
以上的代码就将max函数的入口地址赋给了指针变量p
函数名代表函数的入口地址
2.用指向函数的指针做函数参数
int my_max(int x,int y,int (*p)(int,int))
max (a,b,p)
返回指针值的函数:
int* p(int x,int y)
int (* p) (int x,int y) ; 函数指针
指向指针的指针(二级指针):
int * (*p)
int **p
p为指向一个指向整型数据的指针变量的指针
指针的运算:
1.指针变量加/减一个指针
C++规定: 一个指针变量加/减一个整数是将该指针变量加/减 它指向的变量所占用的内存单元字节数相加或相减
2.指针变量的赋值:
p =&a; 将变量a的地址赋给p
p = array;将数组array首个元素的地址赋给p
p = array[i]; 将数组array首个元素i的地址赋给p
p = max; 将函数max的入口地址赋给p
p1 = p2 ;p1和p2需都是同类型的指针变量,将p2的值赋给p1
重点: 指针为空int * p , p = null 该指针不指向任何变量
指针为空和指针未赋值是两个概念,前者有值(为0),不指向任何变量,后者未赋值但是不代表无值,这是一个无法估量的值
可能会指向未指定的单元。 一定要避免这种情况的发生
注意的小点: 0值常量表达式, 编译时获得0值的const对象,字面值常量0 NULL
自定义数据类型:
结构体: 是将不同数据类型组合在一起的数据类型
定义:
struct : 结构体类型名:
{成员变量1,成员变量2}
声明一个结构体类型必须对每一个成员都进行类型声明 类型名 成员名
声明一个结构体类型 一般会在文件开头,确保文件中的函数都可以调用
3. 结构体变量的引用:
1.可以将一个结构体变量的值,赋给一个具有相同结构体变量
2.可以引用一个结构体变量中的 一个成员的值
3. 如果一个成员本身也是一个结构体,就要用成员运算符一级,一级向下查找成员
结构体变量的成员,可以像普通变量一样进行各种运算
可以引用结构体变量成员的地址,也可以引用结构体变量的地址
结构体数组:
定义结构体数组
结构体数组中的每个元素都分别包含各个成员项
结构体数组初始化:
和一般数组是一样的
结构体指针:
结构体的变量的指针,就是该变量所占内存段的起始位置;
1.通过指向结构体变量的指针引用结构体变量的成员:
stu.num (*p).num p->num 等价写法
p->n p指向的结构体变量中的成员n的值
p->n++ p指向的结构体变量中的成员n的值,使用完+1
++p->n p指向的结构体变量中的成员n的值,+1后使用
2.用结构体变量和指向结构体变量的指针构成链表
struct Student
{
int num;
float score;
Student * next
};
结构体类型数据作为函数参数:
1.用结构体变量名做参数;
2.用指向结构体变量做实参,将结构体变量的肢体传给形参
3.用结构体变量的引用变量
公用体:
共用体是几个变量共同占用一段内存的结构
union 共用体类型名
{成员列表}
公用类型名 公用变量名
结构体和共用体差异 : 结构体是所有成员变量的内存长度之和
共用体是取最长成员的长度 作为内存地址
2.访问方式: 共用体变量不能被直接饮用
只能引用共用体变量的成员
枚举类型: 枚举类型是将变量可能出现的值都一一列出的一种类型 ,
2. 枚举类型的定义和引用
enum {枚举常量列表}
枚举类型名 枚举变量名
1.枚举元素按常量处理, 所以称为枚举变量,
一个整数不能直接赋值给一个枚举变量,要先进行强制类型转换 typeed 关键字
typeed int num
引用类型:
声明之后不可以作为其他变量的引用
int a1,a2;
int &b = a1;
int &b = a2; // 错误演示
将引用作为函数参数
1.将变量名作为实参和形参
2.传递变量的指针
3.传递变量的别名
类和对象
在这块是主要是public private protected 区别
类和结构体的异同:
结构体不加声明时默认成员是共有的
类不加声明默认成员是私有的
对象成员的引用:
Student stu1,stu2
Student* stup;
Student &stur = stur3
stu1.age //通过对象名
stu1.age //通过引用变量
stu1->age //通过指向对象的指针
* &
区分* 是什么运算符: 在声明语句中且不为右值部分的时候,是指针运算符
不在声明语句中,作为左值部分时候,是间接访问运算符
区分& 是什么运算符: 在声明语句中作为左值部分的时候,引用运算符
不在声明语句中作为右值部分时候,取地址运算符