指针学习总结
内联函数
const 成员函数
构造函数:可以创建多个构造函数.
析构函数:没有返回值 不能有参数 只能有一个
堆栈
进栈顺序:被调用函数下一行的内存地址,其次是函数的参数,多个参数按照从右往左的顺序,最后是函数的局部变量.
用指针创建堆中空间
用关键字new创建一个堆并分配内存
int *p;
p=new int;//分配4个字节的空间
int *p=new int
*p=4//将4赋给存储区
用指针删除堆中空间
int *p=new int;
delete p;//这将释放指针所指向的内存,而不会释放指针.
p=0;//设置空指针,将指针p中保存的地址清零
在堆中创建对象
Human *p;
p=new Human//创建了一块内存空间,同时调用默认构造函数来构造一个对象,所占用内存大小根据Human类对象的成员变量来决定.
Human *p=new Human;
在堆中删除对象
可以直接删除指向该对象的指针,这样程序会自动调用对象的析构函数来销毁该对象,同时释放内存.
访问堆中的数据成员
在堆中创建的对象:
(*p).get();//*号读取p指向的对象,然后再用.访问对象成员函数
使用成员指针运算符
p->get();
在构造函数函数中开辟内存空间
将类的数据成员定义为一个指针,然后在构造函数中开辟新空间,将该空间的地址赋值给指针成员,而在析构函数中则释放指针成员指向的新空间.
对象在栈与堆中的不同
堆中:超出作用域时,会自动调用析构函数释放该对象,而堆要手动释放,用delete objiective.
this指针
this指针记录每个对象的内存地址,然后通过间接引用运算符->访问该对象的成员,弄人情况下,this指针可以省略不写,编译器会自动在成员变量i前面加上this指针,永安里表示这个i成员是属于某个对象的.不同对象输出的this指针保存的内存地址不同.
this->i=x;//i=x;
由于this指针保存了当前对象的地址,因此可以通过该指针直接读取当前对象的数据.this指针的创建与删除是由编译器来完成的.
指针的常见错误
删除一个指针后,一*定要将该指针设置为空指针,*这是因为删除该指针只会释放它所指向的内存空间,不会删除指针.因此这个指针还存在,且仍然会指向原来的内存空间,若再使用该指针,则会出错
{
}
指针的加减运算
int *p=new int
p++;//p指向的是int变量,加1操作,将原来的内存地址增加4个字节.
常量指针
int a=2;
int *const p=&a;//它 的值不可以改变,但是指向的值是可以改变的,常量指针必须初始化
A *const p=new A;
指向常量的指针
该指针指向的整型变量是不可以修改的,但是该指针可以被修改
const int *p;
const A* P=new A;
P=P+1;
指向常量的常指针
都不能修改
const int * const p;
//p=p+1;
//p->set(11);//都不能行