栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 指针实例

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 指针实例

文章目录
  • 1、编写程序,使用一维数组读写二维数组的数据,并与普通二维数组直接读写数据的结果进行比较
    • 实例: 使用一维指针数组读写二维数组数据
  • 2. 编写具有一定功能的简单程序,要求用到对象指针、this指针、指向类成员的指针(包含类普通数据成员,类函数成员以及静态数据成员、静态函数成员)等语法机制。
    • 对象指针 this指针 指向非静态数据成员的指针 指向非静态函数成员的指针
      • 1.对象指针就是存放指针地址的变量,遵循一般指针变量的各种规则
      • 2.this 指针
      • 3. 指向非静态数据成员的指针
      • 4.指向静态函数成员的指针
      • 5.实例(Point类)
    • 指向静态数据成员的指针和指向静态函数成员的指针
      • 1.指向静态数据成员的指针
      • 2.指向静态函数成员的指针
      • 3.实例(Cat类)

1、编写程序,使用一维数组读写二维数组的数据,并与普通二维数组直接读写数据的结果进行比较 实例: 使用一维指针数组读写二维数组数据

#include
using namespace std;

//使用一维指针数组读写二维数组数据

const int N = 1e4+10;

int *a[N];//指针数组
int b[N][N];//二维数组
int n,m;//n 是行,m 是列

int main()
{
	
	cout<<"请输入二维数组的行"<>n;
	cout<<"请输入二维数组的列"<>m;
	cout<<"请输入数据"<
		for(int j=1;j<=m;j++)
		{
			cin>>b[i][j];
		}//把数据先存进二维数组
		a[i]=b[i];//把二维数组每一行的列首地址给指针数组
	}
	
	cout<<"指针数组输出数据为:"<
		for(int j=1;j<=m;j++)
		{
			cout<
		for(int j=1;j<=m;j++)
		{
			cout< 
2. 编写具有一定功能的简单程序,要求用到对象指针、this指针、指向类成员的指针(包含类普通数据成员,类函数成员以及静态数据成员、静态函数成员)等语法机制。 
对象指针 this指针 指向非静态数据成员的指针 指向非静态函数成员的指针 
1.对象指针就是存放指针地址的变量,遵循一般指针变量的各种规则 
声明形式:
Point a(1,0);
Point *p=&a;
访问成员的语法形式: 对象指针名->成员名
例:p->getX()
2.this 指针

this 指针用于指向正在被函数成员操作的对象,不咋常用,不详细介绍,有兴趣的同学去看看其他大佬的博客吧;

return x;
return this->x;
3. 指向非静态数据成员的指针
声明形式:
类型说明符  类名::*指针名
例:double Point::*px;
访问成员的语法形式: 
对象名.*类成员指针名
或
对象指针名->*类成员指针名
例:
p->*px;
a.*px;
4.指向静态函数成员的指针
声明形式:
类型说明符 (类名::*指针名)(参数表)
例:double (Point::*gx)();
访问成员的语法形式: 
(对象名.*类成员指针名)(参数表)
或
(对象指针名->*类成员指针名)(参数表)
例:
(p->*gx)();
(a.*gx)();
注意是两个括号很重要!!
5.实例(Point类)
#include
using namespace std;

//对象指针
//this指针
//指向数据成员的指针
//指向函数成员的指针

class Point{
	public:
		double x,y;
	public:
		Point(double xx,double yy)
		{
			x=xx;
			y=yy;
		}//构造函数
		~Point(){}//析构函数
		Point(Point &p)
		{
			x=p.x;
			y=p.y;
		}//复制构造函数
		
		double getX(){
			return this->x;
		}//获得横坐标
		double getY(){
			return this->y;//利用this函数获得目的对象的对应数据
		}//获得纵坐标
};

double Point::*px = &Point::x;
double Point::*py = &Point::y;//指向类数据成员的指针

double (Point::*gx)() = &Point::getX;
double (Point::*gy)() = &Point::getY;//指向类函数成员的指针

int main()
{
	Point a(3,2);//构造一个点对象
	Point *b;//创建一个点对象指针
	
	b=&a;//给点对象指针赋值
	cout<getX()<*px<*gx)();//利用对象指针和指向类函数成员的指针获得横坐标
	
}
指向静态数据成员的指针和指向静态函数成员的指针 1.指向静态数据成员的指针
声明形式:
类型说明符  *指针名=&类名::静态数据成员名
例:
int *nums=&Cat::numOfCats;
访问形式:
这样访问要注意要把静态数据成员定义成public类型
cout<<*指针名;
2.指向静态函数成员的指针
声明形式:
类型说明符 (*指针名)(参数表)=类名::静态函数成员名
例:
void (*getnums)() = Cat::getNumOfCats;
访问形式:getnums();
注意声明的时候没有&
3.实例(Cat类)
#include
using namespace std;

//静态数据成员指针
//静态函数成员指针

class Cat{
	public:
		Cat(int age1=0)
		{
			age=age1;
			numOfCats++;
		}//构造函数,总数加一
		~Cat()
		{
			numOfCats--;
		}//析构函数,个数减一
		Cat(Cat &p)
		{
			age=p.age;
			numOfCats++;
		}//复制构造函数,个数加一
		void getage()
		{
			cout<
			cout<<"cat的数量为:"<
			age=age1;
		}//修改年龄
		static int numOfCats;//静态数据成员,注意定义成共有的
		
	private:
		int age; 
};

int Cat::numOfCats=0;//外部定义一次,赋初值,开辟单独空间

int main()
{
	Cat a(12);
	int *nums=&Cat::numOfCats;
	cout<<*nums<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849124.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号