C++学习笔记21:使用 new 创建动态结构

创建动态结构:
        要创建动态结构,需要同时使用结构类型和 new。例如,要创建一个未命名的 inflatable 类型,并将其地址赋给一个指针,可以这样做:
        inflatable * ps = new inflatable;
访问结构成员:
        可以用来访问结构成员的运算符包括句点运算符(.)箭头运算符(->)。如果结构标识符是结构名,则使用句点运算符;如果标识符是指向结构的指针,则使用箭头运算符。另外,如果 ps 是指向结构的指针,则 *ps 就是被指向的值——结构本身,此时可使用句点运算符访问结构成员,如 (*ps).price(C++的运算符优先规则要求使用括号)

        下面的示例程序演示了两种访问结构成员的指针表示法。

//newstrct.cpp -- 使用new创建一个未命名的结构,并演示两种访问结构成员的指针表示法
#include <iostream>
using namespace std;

struct inflatable
{
	char name[20];
	float volume;
	double price;
};

int main()
{
	inflatable * ps = new inflatable;              //创建一个未命名结构并给未命名结构分配空间
	cout << "Enter name of inflatable item: ";
	cin.get(ps->name, 20);                         //访问结构成员方法一:利用指针变量名称和箭头成员运算符 -> 直接访问结构成员
	cout << "Enter volume in cubic feet: ";
	cin >> (*ps).volume;                           //访问结构成员方法二:先对指针解除引用,在利用句点运算符访问结构成员
	cout << "Enter price: $";
	cin >> ps->price;                              //方法一

	cout << "Name: " << (*ps).name << endl;                //方法二
	cout << "Volume: " << ps->volume << " cubic feet\n";   //方法一
	cout << "Price: " << (*ps).price << endl;              //方法二

	delete ps;                                      //释放未命名结构所使用的内存空间
	return 0;
}

        下面的示例程序演示了 new 和 delete 的配套使用,以及使用 delete 释放内存以便能够重新使用。

//delete.cpp -- 使用new和delete来存储通过键盘输入的字符串
#include <iostream>
#include <cstring>
using namespace std;

char * getname(void);       //函数原型

int main()
{
	char * name;                                    //创建char类型指针name

	name = getname();                               //将getname()函数的返回值(地址)赋给指针name
	cout << name << " at " << (int *)name << endl;  //指针name指向getname()函数中分配的内存块,打印该内存块中存储的字符串及其地址
	delete[] name;                                  //释放name指向的内存块

	name = getname();                               //再次调用
	cout << name << " at " << (int *)name << endl;
	delete[] name;

	return 0;
}

char * getname()
{
	char temp[80];                              //创建char类型数组temp
	cout << "Enter the last name: ";
	cin >> temp;                                //将用户输入的单词放到temp数组中
	char * pn = new char[strlen(temp) + 1];     //根据用户输入的字符串的长度来分配新内存,+1是指最后的空字符
	strcpy(pn, temp);                           //将temp中的字符串复制到新得内存块中

	return pn;                                  //返回字符串副本的地址
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值