C++成员指针
来源:互联网 发布:php 实例调用静态方法 编辑:程序博客网 时间:2024/05/27 02:27
1.成员指针是一种相对地址
2.结构体中或者类中的成员(变量或者函数)的相对地址的获取方式 &结构类型名::成员
3.声明成员指针变量
成员类型 结构类型名::*指针变量名
4.通过成员指针访问结构成员
结构变量*指针变量名
//我们要声明 指针 指向成员变量,成员变量的地址会一样么?成员变量的地址是由结构体对象决定的#include <iostream>using namespace std;//日期结构体struct Date{ int year; //年月日三个成员变量 int month; int day; void show (){ cout << year << '-' << month << '-' << day << endl; }};//创建这个结构体是想测试结构体对象的内存空间struct Student { int age; //年龄 char sex; //性别 double score; //分数 void study(){ cout << "学生的分数是:" << score << endl; }};int main(){ //获取成员变量地址 &类型名::变量名 //&Date::year; //int* py = &Date::year; //声明 成员变量指针 指向成员变量 int Date::* py = &Date::year; int Date::* pm = &Date::month; int Date::* pd = &Date::day; //通过指针 输出它们的地址 cout << py << endl; cout << pm << endl; cout << pd << endl; /* 会发现打印的结果都是1,原因是cout打印不出成员变量的地址,打印1是相当于true告诉你这真的是地址 */ printf("py = %p\n",py); printf("pm = %p\n",pm); printf("pd = %p\n",pd); /* py = 0x0 pm = 0x4 pd = 0x8 输出的结果是0 4 8 那是因为这是相对地址 相对于这个对象的开始地址来说,第一个year相对于对象是0 ,然后month是int类型占4个字节,所以month相对于对象的地址是4...day是8 每个对象都有这三个变量,每个变量相对于每个对象的地址都是0 4 8 */ #pragma 通过一个结构体(类)创建的对象在内存当中到底占多大空间??? 创建对象的时候 分配内存空间的大小是由该类的成员变量决定(方法创建完都放在代码区的,所以在此不考虑内存空间,方法名是一个函数指针,通过函数指针找到那个函数去调用) Date d; cout << "日期对象占的内存空间多大: " << sizeof(d) << endl;//输出12 Student stu; cout << "学生对象占的内存空间大小: " << sizeof(stu) << endl;//输出16 /* 这里输出的却是16 为什么呢?为什么不是结构体变量类型占的内存空间的累加呢?这里就错了! C语言求结构体大小的问题,成员变量的类型不一样这里涉及到(“对齐补齐”)的原理 */ #pragma 获取到成员变量的地址有什么用? Date date; date.year = 2015; cout << "通过成员变量本身访问 " << date.year << endl; //能不能通过 成员变量指针 去赋值? date.*py = 2999; //*py指向一个成员变量year 所以也就相当于date.year 注意 .*不能分开,它们是一个运算符 cout << "通过成员变量指针赋值 " << date.year << endl; date.month = 13; date.day = 32; date.show(); //输出 2999-13-32 //这时候date在栈里,date是一个对象,对象访问成员变量用点. 访问成员变量指针用点星 .* #pragma 如果对象在堆里呢??? Date *pdate = new Date; //堆中是用一个指针来指向一个堆里的空间 //通过指针访问变量 是用箭头 -> pdate ->year = 3000; cout << "通过指针访问变量" << pdate->year << endl; //能通过 成员变量指针 访问成员变量吗? pdate->*py = 3333; cout << "通过 成员变量指针 访问成员变量 " << pdate->year << endl; // 同理箭头星也是一个运算符 成员变量指针*py指向year可以取出year, 整体相当于pdate ->year return 0;}
0 0
- Linux C 使用指针访问成员
- 成员函数的指针(C++)
- c语言结构体指针成员初始化
- c++:成员指针运算符 .* 和 ->*
- C++:指向对象成员函数的指针
- C++(25)管理指针成员
- C++_类成员变量指针
- C++_Primer_chapter18 3.类成员的指针
- C++const成员和this指针
- 【boolan c++】 带有指针成员的class
- c函数指针和c++类成员函数指针
- 含有指针成员的类的拷贝[C/C++/C#]
- 成员指针
- 成员指针
- 成员指针
- 成员指针
- 成员指针
- C++的成员函数指针简要
- 纯CSS实现三列DIV等高布局
- Linux Mint装机--安装SSH
- 神秘的EJB
- html5 svg 中元素点击事件添加方法
- IOS开发框架 EasyIOS 2.2 版本更新
- C++成员指针
- Android Debug Bridge-adb命令全集(官方)
- JVM内存结构
- zen coding
- 详解Vs2008下打包安装程序的一些技巧(含win7下提权限、卸载以及安装时定向到网页)
- 测试
- java基础---类集框架三
- UI设计师不可不知的安卓屏幕知识
- C#中字符串转化为整型变量的一般方法