创建动态结构:
要创建动态结构,需要同时使用结构类型和 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; //返回字符串副本的地址 }
C++学习笔记21:使用 new 创建动态结构
最新推荐文章于 2023-04-26 21:31:32 发布