c++从零开始 您所在的位置:网站首页 指针类型运算 c++从零开始

c++从零开始

2023-09-23 06:30| 来源: 网络整理| 查看: 265

指针真正地用武之地在于,在运行阶段分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。c++ 提供了一种方法—new 运算符。

1、如何使用 new 运算符

首先,程序员需要告诉 new,需要为哪种数据类型分配内存,然后,new 将找到一块长度正确的内存块,并返回该内存块的地址。之后程序员再将改地址赋给一个指针。示例如下:

int *pn = new int;

new int 告诉程序,需要存储 int 的内存,new 运算符根据类型来确定多少内存的字节。然后,它找到这样的内存并返回地址。接下来将地址赋给 pn,pn 是被声明为指向 int 的指针。在这种情况下,因为 pn 指向的内存没有名称,只能通过指针对其进行访问。

为一个数据对象(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下: *typeName pointer_name = new typeNmae; 需要在两个地方指定数据类型:用来指定需要什么样的内存和用来声明合适的指针。以下程序演示了如何使用 new:

#include int main() { using namespace std; // new int 类型 int a = 100; int* pt = new int; *pt = 100; cout char name[20]; float volume; double price; }; int main() { using namespace std; inflatable* ps = new inflatable; // 创建指向结构的指针 cout price; cout char temp[80]; cout temp; char* pn = new char[strlen(temp) + 1]; strcpy_s(pn,strlen(temp)+1, temp); return pn; }

程序说明: 对于程序中的 getname()函数,它使用 cin 将输入的单词放入 temp 中,然后使用 new 分配内存,以存储该单词。程序需要 strlen(temp)+1个字符(包括空字符)来存储该字符串,因此将这个值提供给 new。获得空间后,getname() 使用标准函数 strcpy_s() 将 temp 中的字符复制到新的内存块中。最后返回 pn。 在 main() 函数中,name 得到了 getname() 的返回值 pn。在使用了字符串之后使用 delete 来释放 name 的内存块。 每一次的输入调用 getname()函数来分配内存,使得所分配的内存刚好能够存储字符串,相比于静态联编,这样能够节省大量的内存。

6、学完本章存在的疑问 在介绍动态数组时,书上说的是在程序运行时确定数组的长度,但是 int *pr = new int[10]这样的语句,new 运算符已经分配了 10 个内存块给 10 个元素,那就是在程序运行前已经分配了内存,和静态联编好像没有差异。此外,书上解释使用 new 时,需要数组时则创建,不需要则不创建?但是同样的在程序编译时 new 不是已经分配了内存了吗?

解答:(自己的理解,以后理解更深入再修改)

在编译时,程序并未给 new 分配内存,在程序运行到 new 时才实时分配。数组是在编译时直接分配了内存,并且数组的长度一定已经确定了,它的长度的值只能由常量作参数;new 使得数组的长度可以随着情况进行确定,比如输入字符长度。由于 new 的长度是根据实际情况确定的,如果给 new 的参数为 0,那么 new 实际上不需要分配内存。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有