【C++ Primer Plus学习记录】指针——使用new来分配内存

下面看看如何使用指针来管理运行阶段的内存空间分配。

指针真正的用武之地在于,在运行阶段分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。

在C语言中,可以用库函数malloc()来分配内存,在C++中仍然可以这样做,但C++还有更好的方法——new运算符

下面试试这种新技术,在运行阶段为一个int值分配未命名的内存,并使用指针来访问这个值。这里的关键所在是C++的new运算符。程序员要告诉new,需要为哪种数据类型分配内存;new将找到一个长度正确的内存块,并返回该内存块的地址。程序员的责任是将该地址赋给一个指针。下面是一个这样的示例:

int *pn = new int;

new int 告诉程序,需要适合存储int的内存。new运算符根据类型来确定需要多少字节的内存。然后,找到这样的内存并返回其地址。接下来,将地址赋给pn,pn是被声明为指向int的指针。

将这种方法与将变量的地址赋给指针进行比较:

int higgens;
int * pt = &higgens;

上述两种情况都是将一个int变量的地址赋给了指针。在第二种情况下,可以通过名称higgens来访问该int,在第一种情况下,则只能通过该指针进行访问。

pn指向的内存没有名称,如何称呼它呢?我们说pn指向一个数据对象,这里的“对象”不是“面向对象编程”中的对象,而是一样“东西”。术语“数据对象”比“变量”更通用,它指的是为数据项分配的内存块。 

为一个数据对象(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下:

typeName * pointer_name = new typeName;

需要在两个地方指定数据类型,用来指定需要什么样的内存和用来声明合适的指针。

//4.17如何将new用于两种不同的类型
#include
using namespace std;

int main()
{
	int nights = 1001;
	int *pt = new int;//在程序运行时进行
	*pt = 1001;

	cout << "nights value = " << nights << ": location " << &nights << endl;
	cout << "int value = " << *pt << ": location = " << pt << endl;

	double *pd = new double;
	*pd = 10000001.0;

	cout << "double value = " << *pd << ": location = " << pd << endl;
	cout << "location of pointer pd: " << &pd << endl;//&pd为指针本身的地址

	cout << "size of pt = " << sizeof(pt) << ": size of *pt " << sizeof(*pt) << endl;
	cout << "size of pd = " << sizeof(pd) << ": size of *pd " << sizeof(*pd) << endl;

	system("pause");
	return 0;
}

你可能感兴趣的:(c++,学习,开发语言,软件工程,计算机网络)