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创建动态数组

  

8、C++指针和自由存储空间的更多相关文章

  1. c语言程序设计案例教程(第2版)笔记(四)—指针、分配存储空间、文件

    零散知识点: 指针类型:每个变量占用的首单元地址称为这个变量的存储地址. “&”为“取地址运算符”.格式:&  变量名.功能:返回指定变量的存储地址. “*”为“取内容运算”.格式:* ...

  2. (4)C++ 复合类型-指针

    篇幅长从 https://www.cnblogs.com/buchizaodian/p/11511256.html 提取出来 七.指针和自由存储空间  1.寻址运算符 * #include<io ...

  3. C++—复合类型

    内容概要: -创建和使用数组 -创建和使用C-风格字符串 -创建和使用string类字符串 -使用方法getline()和get()读取字符串 -混合输入字符串和数字 -创建和使用结构 -创建和使用共 ...

  4. C++ Primer Plus (Stephen Prata 著)

    第1章 预备知识 (已看) 第2章 开始学习C++ (已看) 第3章 处理数据 (已看) 第4章 复合类型 (已看) 第5章 循环和关系表达式 (已看) 第6章 分支语句和逻辑运算符 (已看) 第7章 ...

  5. C++ Primer Plus学习:第四章

    C++入门第四章:复合类型 1 数组 数组(array)是一种数据格式,能够存储多个同类型的值. 使用数组前,首先要声明.声明包括三个方面: 存储每个元素中值的类型 数组名 数组中的元素个数 声明的通 ...

  6. C++_基础2-复合数据类型

    C语言使用术语“派生类型”,C++对类关系使用术语“派生”.所以就改用“复合类型”. 数组 数组是一种数据格式,能够存储多个同类型的值. 数组声明应指出以下三点: 存储在每个元素中的值的类型: 数组名 ...

  7. c++ primer plus 第6版 部分一 1-4章

    c++ primer plus 第6版 源代码 ---编译器---目标代码---连接程序(启动代码--库代码)---可执行代码 源代码扩展名:c   cc   cxx     C    cpp     ...

  8. c++学习书籍推荐《C++ Primer Plus中文版(第6版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 一本经久不衰的C++畅销经典教程:一本支持C++11新标准的程序设计图书.  它被誉为“开发人员学习C++的教程,没有之一”! Amazon网站“Langua ...

  9. (3)C++复合类型

    存储数据时必须跟踪的三个属性:信息储存在何处,存储的值,存储的类型 一.数组 #include <iostream> using namespace std; int main() { / ...

随机推荐

  1. bash&nbsp;shell笔记1&nbsp;脚本基础知识

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/505644 * ...

  2. Uboot详细解析2

    1.第二阶段的主线函数位于u-boot-2010.06/arch/arm/lib/board.c. 第二阶段的功能: <1> 初始化本阶段要使用到的硬件设备. 设置时钟.初始化串口. bo ...

  3. 辽宁工程技术大学校园网(深澜) 叠加小水管提速,多wan叠加负载均衡

    教程没啥大用了.可以直接修改路由器为DHCP自动获取ip,然后直接登录校园网. 昨天晚上尝试了下用潘多拉固件多wan叠加网速,负载均衡,算是提高了速度. 转载请注明出处.教程供参考.本教程不是破解教程 ...

  4. 【转】在SharePoint Server 2010中更改“我的网站”

    在安装SharePoint Server 2010的时候,创建的第一个站点是一个"NetBIOS名称"的网站,而这个时候,"我的网站"(或称"个人网站 ...

  5. java基础之JDBC七:C3P0连接池的使用

    使用C3P0的前提是需要引入jar包 具体使用如下: /** * c3p0的应用 * 前提:引入c3p0的jar包 */ public class Test { public static void ...

  6. 09-nginx Rewrite语法详解

    和location类似,也是要负责URL解析的. rewrite  重写 nginx的配置非常多,nginx的第三方模块也非常非常多.不可能讲每一种模块的配置办法.通常碰到一个nginx的新问题你想怎 ...

  7. js通过session判断登录与否并确定跳转页面以及回车按钮提交

    本文实例讲述了js判断登录与否并确定跳转页面的方法.分享给大家供大家参考.具体如下: 使用session存储,确定用户是否登录,从而确定页面跳转至哪个页面. 判断本地有无customerID func ...

  8. DEDE 5.7中各函数所在的文件和位置

    /include/taglib/tag.lib.php 2 //function GetTags()/include/payment/yeepay.php 415 function log_resul ...

  9. zookeeper 面试题 有用

    .zookeeper是什么框架? zookeeper是一个开源的分布式协调服务框架. 2.有哪些应用场景? 应用场景:分布式通知/协调.负载均衡.配置中心.分布式锁.分布式队列等. 3.使用什么协议? ...

  10. 为什么说Java String 类型的值是不可改变的?

    String对象是不可变的,它的内容是不能改变的.下列代码会改变字符串的内容吗? 1 2 String s = "Java"; s = "HTML"; 答案是不 ...