首页 > 技术文章 > 8、C++指针和自由存储空间

wanshuai 2018-05-25 17:00 原文

8、C++指针和自由存储空间
  
计算机程序在存储数据时必须跟踪3中基本属性。

    • 信息存储在何处
    • 存储的值为多少
    • 存储信息是什么类型。  

          指针是 一个变量,其存储的是值得内存地址

  对于常规变量的地址,只需要对变量应用地址运算符(&),就可以获得它的位置;例如,如果home是一个变量,那么&home就是他的地址。

#include "stdafx.h"
#include <iostream>    //引用库函数
using namespace std; //使用命名空间

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


int main()           //主函数,程序执行的入口
{ 

	int donuts = 6;
	double cups = 4.5;
	cout << "donuts value = " << donuts;
	cout << "and donuts address = " << &donuts << endl;
	cout << "cups value = " << cups;
	cout << "and cups address = " << &cups << endl;
	cin.get();
    return 0;          //函数返回值
}

  结果:

 

 因此,指针名表示的是地址。* 运算符被称为间接值(indirect velue)或解除引用(dereferencing)运算符,将其应用于指针,可以得到该地址存储的值(这和乘法使用的符号相同,C++根据上下文来确定所指的是乘法还是解除引用)

1、指针申明与初始化:

  指针声明必须制定指针的数据的类型

int * p_updata

这表明,p_updata的类型为int,由于*运算符被用于指针,因此p_updata变量本身必须是指针。可以这样说,p_updata是指针(地址),而*p_updata是int,而不是指针。

#include "stdafx.h"
#include <iostream>    //引用库函数
using namespace std; //使用命名空间

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


int main()           //主函数,程序执行的入口
{ 


	int hig = 5;
	int * pt = &hig;
	cout << "Value of hig =" << hig
		<< ";Address of hig =" << &hig << endl;
	cout << "Value of *pt =" << *pt
		<< ";value of pt =" << pt << endl;
	cin.get();
    return 0;          //函数返回值
}

  结果:

2、指针的危险:

  C++在创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。为数据提供空间是一个独立的步骤。

long *fellow;           //创建一个指针
*fellow = 223323;  //为指针赋值,但是fellow,没有被赋值,所以不知道fellow代表的地址是多少,所以不知道223323将会存储在内存中的哪里。

   警告:一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个人确定的、适当的地址。

3、指针和数字

  

4、使用new来分配内存

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

 

5、使用delete释放内存

6、使用new创建动态数组

  

 

推荐阅读