研一寒假04_static&组合类型

#--------------------------------static&组合类型----------------------------------#

/* c++管理数据内存方式 */

//自动存储:在函数内部定义的常规变量使用中断存储空间,称为自动变量(存储在栈中),意味着他们在所属的函数被调用时自动产生,在函数结束时消亡(内存自动释放)
//静态存储:在函数外面定义或者是使用关键字static定义的变量,在整个程序执行期间都存在,例如:static double fee=56.50;
//动态存储:使用new创建和使用delete释放内存的变量,new和delete管理一个内存池,这个内存池有别于用于静态存储和自动存储的内存,数据的生命周期不完全受函数的生存或程序控制,程序员有更大的控制权

//内存泄漏:使用new分配内存之后,没有使用delete释放内存


/* 组合类型 */
#include <iostream>

//新建一个结构
struct inflatable
{
int year;
int month;
};

//主函数
int main()
{
//使用新类型定义结构
inflatable s01,s02,s03; //使用类型inflatable创建结构变量s01,s02,s03
s01.year = 1998; //给s01中的成员year赋值

//定义指向结构的指针
inflatable* pa = &s02; //创建指向结构变量s02的指针pa,所以*pa就是一个结构变量,所以(*pa).year=1999这样赋值也是可以得
pa->year = 1999; //给结构变量s02中的year赋值,(*pa).year=1999也是可以得 (*pa).month=12

//定义结构数组
inflatable trio[3]; //创建包含三个结构的结构数组,其中trio是一个数组,而trio[0]是一个结构,trio[0].year就是该结构中的一个成员
trio[0].year=2003; //给结构trio[0]中的成员year赋值
(trio+1)->year=2008; //由于数组名是数组内第一个元素的地址,所以数组名也是一个指针,因此也可以使用简介成员运算符"->"
//等价于 trio[1].year=2008;

std::cout<<trio->year<<std::endl; //也就是std::cout<<(trio+0)->year<<std::endl; 打印2003
//等价于std::cout<<trio[0].year<<std::endl; 打印2003
//创建指针数组
const inflatable* arp[3]={&s01,&s02,&s03}; //arp是一个指针数组,arp[1]就是一个指针,因此可以使用使用间接成员运算符来访问成员
std::cout<<arp[1]->year<<std::endl; //打印1999 注意arp[1]是数组中的第二个元素!!

//创建指向指针数组的指针
const inflatable** ppa = arp; //arp是一个数组的名称,也是数组内第一个元素的地址,但数组内第一个元素为指针,所以ppa是一个指针,
//由于arp是一个(指向结构指针)的指针,那么*ppa就是一个结构指针,可以使用间接成员运算符访问其成员
//类似于int a=5; int* pw=&a; //pw是一个(指向a)的指针,那么*pw就是a ¥¥¥¥¥
//且等价于 auto ppa = arp; //在c++11中编译器知道arp的类型,能正确推断出ppa的类型
std::cout<<(*ppa)->year<<std::endl; //ppa=&s01 打印1998
std::cout<<(*ppa+1)->year<<std::endl; //ppa+1=&s02 打印1999

return 0;
}


最后编辑于 2019.02..19 17:02 家

猜你喜欢

转载自www.cnblogs.com/YiYA-blog/p/10458543.html
今日推荐