1、编写程序,使用一维数组读写二维数组的数据,并与普通二维数组直接读写数据的结果进行比较
实例: 使用一维指针数组读写二维数组数据
#include<bits/stdc++.h> using namespace std; //使用一维指针数组读写二维数组数据 const int N = 1e4+10; int *a[N];//指针数组 int b[N][N];//二维数组 int n,m;//n 是行,m 是列 int main() { cout<<"请输入二维数组的行"<<endl; cin>>n; cout<<"请输入二维数组的列"<<endl; cin>>m; cout<<"请输入数据"<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>b[i][j]; }//把数据先存进二维数组 a[i]=b[i];//把二维数组每一行的列首地址给指针数组 } cout<<"指针数组输出数据为:"<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cout<<a[i][j]<<" "; } cout<<endl; }//利用指针数组输出数据 cout<<"二维数组输出数据为:"<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cout<<b[i][j]<<" "; } cout<<endl; }//利用二维数组输出数据 }
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<bits/stdc++.h> 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<<b->getX()<<endl;//利用对象指针获得点的横坐标 cout<<b->*px<<endl;//利用对象指针和指向类数据成员的指针获得横坐标 cout<<a.*py<<endl;//利用指向类数据成员的指针获得纵坐标 cout<<(a.*gx)()<<endl;//利用指向类函数成员的指针获得横坐标 cout<<(b->*gx)();//利用对象指针和指向类函数成员的指针获得横坐标 }
指向静态数据成员的指针和指向静态函数成员的指针
1.指向静态数据成员的指针
声明形式: 类型说明符 *指针名=&类名::静态数据成员名 例: int *nums=&Cat::numOfCats;
访问形式: 这样访问要注意要把静态数据成员定义成public类型 cout<<*指针名;
2.指向静态函数成员的指针
声明形式: 类型说明符 (*指针名)(参数表)=类名::静态函数成员名 例: void (*getnums)() = Cat::getNumOfCats;
访问形式:getnums(); 注意声明的时候没有&
3.实例(Cat类)
#include<bits/stdc++.h> 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<<age<<endl; }//输出年龄 static void getNumOfCats() { cout<<"cat的数量为:"<<numOfCats<<endl; }//静态成员函数 输出总数 void reage(int age1) { age=age1; }//修改年龄 static int numOfCats;//静态数据成员,注意定义成共有的 private: int age; }; int Cat::numOfCats=0;//外部定义一次,赋初值,开辟单独空间 int main() { Cat a(12); int *nums=&Cat::numOfCats; cout<<*nums<<endl;//创建对象a 利用构造函数 利用指向静态数据成员指针输出总个数 Cat b=a; cout<<*nums<<endl;//创建对象b 利用复制构造函数 利用指向静态数据成员指针输出总个数 void (*getnums)() = Cat::getNumOfCats; getnums();//利用指向静态函数成员指针输出总个数 }