8、C++指针和自由存储空间
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++指针和自由存储空间的更多相关文章
- c语言程序设计案例教程(第2版)笔记(四)—指针、分配存储空间、文件
零散知识点: 指针类型:每个变量占用的首单元地址称为这个变量的存储地址. “&”为“取地址运算符”.格式:& 变量名.功能:返回指定变量的存储地址. “*”为“取内容运算”.格式:* ...
- (4)C++ 复合类型-指针
篇幅长从 https://www.cnblogs.com/buchizaodian/p/11511256.html 提取出来 七.指针和自由存储空间 1.寻址运算符 * #include<io ...
- C++—复合类型
内容概要: -创建和使用数组 -创建和使用C-风格字符串 -创建和使用string类字符串 -使用方法getline()和get()读取字符串 -混合输入字符串和数字 -创建和使用结构 -创建和使用共 ...
- C++ Primer Plus (Stephen Prata 著)
第1章 预备知识 (已看) 第2章 开始学习C++ (已看) 第3章 处理数据 (已看) 第4章 复合类型 (已看) 第5章 循环和关系表达式 (已看) 第6章 分支语句和逻辑运算符 (已看) 第7章 ...
- C++ Primer Plus学习:第四章
C++入门第四章:复合类型 1 数组 数组(array)是一种数据格式,能够存储多个同类型的值. 使用数组前,首先要声明.声明包括三个方面: 存储每个元素中值的类型 数组名 数组中的元素个数 声明的通 ...
- C++_基础2-复合数据类型
C语言使用术语“派生类型”,C++对类关系使用术语“派生”.所以就改用“复合类型”. 数组 数组是一种数据格式,能够存储多个同类型的值. 数组声明应指出以下三点: 存储在每个元素中的值的类型: 数组名 ...
- c++ primer plus 第6版 部分一 1-4章
c++ primer plus 第6版 源代码 ---编译器---目标代码---连接程序(启动代码--库代码)---可执行代码 源代码扩展名:c cc cxx C cpp ...
- c++学习书籍推荐《C++ Primer Plus中文版(第6版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 一本经久不衰的C++畅销经典教程:一本支持C++11新标准的程序设计图书. 它被誉为“开发人员学习C++的教程,没有之一”! Amazon网站“Langua ...
- (3)C++复合类型
存储数据时必须跟踪的三个属性:信息储存在何处,存储的值,存储的类型 一.数组 #include <iostream> using namespace std; int main() { / ...
随机推荐
- Jenkins+maven+SVN构建java项目中遇到的问题及解决
[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a g ...
- 斯坦福CS229机器学习课程笔记 part2:分类和逻辑回归 Classificatiion and logistic regression
Logistic Regression 逻辑回归 1.模型 逻辑回归解决的是分类问题,并且是二元分类问题(binary classification),y只有0,1两个取值.对于分类问题使用线性回归不 ...
- iPython notebook 安装使用
pip install jupyter jupyter notebook --allow-root
- tomcat报503 或者无法启动应用
一般都是配置文件有问题,或者路径问题,或者jvm的参数路径问题.... 总之,报错实在是不清楚!这点比resin差远了!!
- Leetcode:Container With Most Water分析和实现
题目大意是提供n个非负整数,a1,...,an,可以将其理解为多个边界(垂直的线段),其中ai处于x坐标i处,并且ai代表的线段高度即为ai的值.要求我们取这样的i与j,使得ai与aj以及x坐标轴围成 ...
- 【bzoj1787】[Ahoi2008]Meet 紧急集合
1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2466 Solved: 1117[Submit] ...
- php连接redis
$redis = new Redis(); $redis->connect();
- eclipse——Maven插件创建java工程
目录结构如下 注意默认JDK为1.5 更改默认JDK 方式一 右键工程 选中JRE1.5 Remove 双击JRE System Library 点击Finish 更改完成 方式二 配置maven ...
- Python基础-3
目录 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 知识插入:嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 一.函数基本语法 函数是什么? 函数一词 ...
- Aircrack使用
Aircrack Aircrack-ng 组件功能之一就是采集WEP及WPA-PSK字典并应用无线端口扫描进行破解,具体组件说明如下: aircrack-ng 功能主要是WEP及WPA-PSK密码的恢 ...