C++笔记之指针应用

本文详细介绍了C++中的指针应用,涵盖了指针热身、指向类成员的指针、指向对象的常指针和指向常对象的指针等核心概念。通过例子解释了如何声明、初始化和使用指针,特别强调了this指针在对象成员函数中的作用以及如何处理指针与常量的关系。此外,还提到了动态创建和释放对象数组以及深拷贝和浅拷贝的概念。
摘要由CSDN通过智能技术生成

一. 指针热身

1. 与地址相关的运算 * 和 &

" * " :
声明:表示声明的是指针。int *p;
执行:表示访问指针所指对象的内容。 *p;
" & ":
声明:出现在声明变量左边,表示声明的是引用。int &r=a;
执行:出现在等号右边或作为一元运算符出现,表示取对象的地址。int *pa=&b; pa=&a;

2.对象指针

声明形式:

类名 *对象指针名

可以通过指针访问对象成员:

对象指针名->成员名

例:

Point A(3,4);
Point *ptr; //声明对象指针
ptr=&A; //将对象A的起始地址赋给对象指针ptr
(*ptr).x;  
ptr->x; //访问所指对象中的x数据成员
(*ptr).getX();
ptr->getX()//访问对象指针所指对象的函数成员
3.this指针

(1) 隐含于每一个类的成员函数中的特殊指针指向本类对象的指针,它的值是当前被调用的成员函数所在的领域的起始地址。
(2)明确地指出了成员函数当前所操作的数据所属的对象。当通过一个对象调用成员函数时,系统先将该对象的地址赋给this指针,然后调用成员函数,成员函数对对象的数据成员进行操作时,就隐含使用了this指针。
(3)在需要时也可以显式的使用this 指针。比如当函数形参和类内已说明变量名相同时,有变量作用域问题,要显示使用this。

Point::Point(int x,int y)
{
   	this->x=x; //显示使用了指向当前对象的this指针
	tihs->y=y;
4.指向普通函数的指针

定义方法:

数据类型(*函数指针名)(参数列表);
函数指针名=函数名;

举例:

include<iostream>
using namespace std;
void getSum(int x,int y){
     cout<<x+y<<endl;}
int main(){
   
     void (*p)(int x,int y);//p是指向void型函数的指针变量
     p=getSum;//将getSum函数的入口地址赋给指针变量p, p就指向了函数
     (*p)(2,3);//调用getSum函数
     return 0;
}

二. 指向类成员的指针

1.指向类的非静态成员的指针

(1)通过指向成员的指针只能访问公有成员
(2)声明指向成员的指针:
包括指向公有数据成员的指针和指向公有成员函数的指针

类型说明符 类名::*指针名;    //指向类的数据成员的指针
类型说明符 (类名::*指针名)(参数表);   //指向类的成员函数的指针

(3)初始化:

指针名=&类名::数据成员名; 
指针名=&类名::函数成员名;

(4)通过对象 / 对象指针 与 成员指针结合访问类的成员:

对象名.*类数据成员指针名;
对象指针名->*类数据成员指针名;

(对象名.*类成员函数指针名)(参数表)
(对象指针名->*类成员函数指针名)(参数表)

举例:

#include<iostream>
using namespace std;
class Point
{
   
public:
 Point(int xx=1,int yy=2,int zz=3)   {
    x=xx;y=yy;z=zz; }
	  int z;
	  int GetX(){
   return x;}
	  int GetY(){
   return y;}
private:
       int x,y;
};
void main()
{
   
	 Point t;
	 Point *ptr=&t;
	 cout<<"x="<<t.GetX()<<endl;
	 cout<<"y="<<ptr->GetY()<<endl;
	 
	 i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值