/*******************************************************************/
/* Day2 */
/*******************************************************************/
#include <iostream>
using namespace std;
class CCat
{
private:
int age;
public:
CCat(){ age = 2; };
~CCat(){};
int GetaAge() const { return age; };
};
int main()
{
// double a = 100;
// double *p = &a;
// cout << *p << '\t' << &p << endl;
// *p++;
// cout << *p << '\t' << &p << endl; //++高于间接运算 相当于指针p+1后指向了一个其他的地方
// cout << p <<'\t'<< *p<<'\t'<<sizeof(p)<<endl; //0018FA78 100 4 所有指针的长度都相同:32位的处理器的计算机为4个字节 64位处理器的计算机为8个字节 但是这是64位处理器啊????
// //对象本身需要8个字节 指针为存储地址需要4个字节
分配 使用和删除指针 删除指针,实际上是释放掉指针指向的指针中的内存,指针本身任然存在,可以重新赋值
// int *o = new int;
// *o = 110;
// cout << *o;
// delete o;
// o = new int;
// *o = 0;
// cout << *o;
//句号运算符和类成员访问运算符区别
CCat* mycat = new CCat; //new的返回值是一个内存地址
//cout <<mycat.GetaAge();
cout << (*mycat).GetaAge();
cout << mycat->GetaAge();
getchar();
return 0;
}
//void SetAge(int anAge);
//int GetAge()const; const成员函数,保证该方法不会修改任何类成员的值
//避免使用goto语句 是因为goto语句可以向前或者向后跳转到任意位置,不加选择的使用goto 语句会导致混乱 质量地下和无法阅读的程序
//break和continue
//break语句立即跳出while循环,继续执行右括号后的语句
//continue跳转到循环的开头
//int *pAge = 0; pAge 被声明为用于存储整型变量的地址 切记指针要初始化0
//指针的三种作用:1.管理自由存储区中的数据 2访问类的成员数据和函数 3按照引用传递参数
//内存泄露的两种情况:1.如果指针在局部变量时,函数返回时,该函数的指针将不在作用域中,从而丢失,使用new分配的内存不会释放 从而不可用
// 2.重新给指针赋值之前没有释放它原来指向的内存,如:
// int *p = new int;
//*p = 7;
// p = new int;
//*p = 9;
//.句号运算符可以用来访问堆栈中的创建的对象的成员和函数 要访问自由存储区中对象的成员 可以使用(*p).getage();
//但是这样很麻烦 C++中的-> 类成员访问运算符可以用于指针直接访问对象的成员
//P159的需要理解
//this是一个指向当前对象的指针,存储了对象的地址
//迷途指针 (失控指针或者悬浮指针):delete用于指针,但没有将她设置为空时引发的,如果在没有重新赋值的情况下重新使用这个指针,后果难以预料
//int *p = new int; *p = 9; delete p; *p = 20//程序奔溃
//正解为 p = 0;此时delete没有问题或者可以重新分配内存
//const指针:记住根据const右边来看,右边是谁 谁不变 值不变还是指针不变
//const int *p1 const右边是int类型 说明p1是指向整型常量的指针 ,p1指向的值是不能修改的
//int * const p2 const右边是p2指针 说明p2是指向整型的常量指针,指向的值是可以修改的,但是不能指向其他变量
//为什么要在自由存储区中声明对象
//自由存储区中的对象在函数返回后任然存在,两外可以在运行时决定需要多少个对象 而不是事先声明
//指针是一个变量 存放的是另外一个变量的地址
//间接运算符返回的是指针指向的地址中的值,地址运算符返回变量的地址
Day2
最新推荐文章于 2022-08-02 13:38:12 发布