#---------------------------------指针-----------------------------------#

#include <iostream>

int main()
{
using namespace std;

/* 指针引入 */
int updates = 6; //声明一个变量
int* p_updates; //声明一个指针p_updates,该指针指向一个地址
p_updates=&updates; //将updates的地址赋给p_updates

cout<<"Address:updates= "<<&updates<<endl; //显示变量updates的地址
cout<<"Address:p_updates= "<<p_updates<<endl; //由于p_updates本身就是地址,所以此处不用再加地址符& 以上两行显示同一个地址

*p_updates=*p_updates+1; //指针(地址)p_updates所指向的值加1,*p_updates和updates是完全等价的.所以这一句将会修改指针p_updates指向的值updates
cout<<"Now updates= "<<updates<<endl; //此时updates的值为7
//int型变量updates和指针变量p_uodates只不过是同一枚硬币的两面,变量updates表示值,并使用&来获取地址;而变量p_updates表示地址,并使用*来获取值
//可以将值赋给*p_updates,这样做将会修改指向的值,即updates

/* 指针声明时的注意 */
int *p1; //可以这样声明
int* p2; //这样也可以,int*是一种复合类型强调的是指向int的指针,在哪里添加空格对编译器没有任何区别
int* p3,p4; //声明指针变量p1和int型变量p2

int higgens=5;
int* pt5 = &higgens; //在声明中初始化指针

/* new分配内存 */
int* pt6; //声明一个指针pt6
//pt6 = 0xB8000000; //在自己的理解中会认为0xB8000000是一个偏移地址,但是编译器却会认为这是一串数字,所以将数字赋给指针(地址)会报错

//报错解决方法一:使用强制转换
pt6 = (int*)0xB8000000; //有效,使用int*进行强制转换,将0xB8000000强制转换为地址

//报错解决方法二:使用new关键字去给指针分配内存地址
int* pt7 = new int; //new关键字的作用是在程序运行时,寻找一块适合存储int的内存,并返回一个地址赋给pt7*****
*pt7 = 1001; //有效,这样就可以直接给*pt7直接赋数字值*****

/* 使用delete来释放new分配的内存 所以new和delete必须是成对出现的 */
double* ps = new double;
*ps = 6;
delete ps; //释放ps所指向的内存,但不会删除指针,且只可释放一次

int jugs=6; //有效,声明一个int型变量jugs并赋初值
int* pq=&jugs; //有效,将jugs的地址赋给指针pq
//delete pq; //无效,delete是来释放new分配的内存的

/* 使用new来创建动态数组 */
//静态联编:数组在编译时加入到程序中,在编写程序时候指定数组长度
//动态联编:在程序运行阶段,如果需要数组,则创建它;如果不需要则不创建;还可以在程序运行时选择数组长度。这种数组被称为动态数组

int* psome=new int [10]; //创建一个包含十个元素的动态数组,new返回数组第一个元素的地址并赋给psome
delete [] psome; //当程序使用new分配内存时,应使用delete来释放内存,[]告诉程序应释放整个数组
//当使用new时带[],那么在使用delete时候也应使用[]
//当使用new时不带[],那么在使用delete时候也应不使用[]

/* 使用动态数组 */
int* psome2=new int [10]; //创建包含十个元素的动态数组,psome2指向第一个元素的地址
cout<<psome[0]<<endl; //输出动态数组的第一个元素
cout<<psome[1]<<endl; //输出动态数组的第二个元素
cout<<psome[2]<<endl; //输出动态数组的第三个元素

double* pw = new double [3]; //创建包含三个元素的动态数组
pw[0]=0.12;
pw[1]=0.22;
pw[3]=0.32;
cout<<"pw[1] is "<<pw[1]<<endl; //输出pw[1] is 0.22
pw = pw+1; //在未执行该句之前,pw指向第一个元素的地址,执行此句后pw将指向下一个元素的地址;此时pw不再执行数组第一个元素的地址,而是指向数组第二个元素的地址
cout<<"pw[0] is "<<pw[0]<<endl; //输出pw[1] is 0.22
cout<<"pw[1] is "<<pw[1]<<endl; //输出pw[1] is 0.32
pw=pw-1; //恢复原来的值
delete [] pw; //释放pw所指向的内存

//由于直接定义的数组中数组名只是一个名字,不可以进行加减运算,但是指针是变量,就可以修改它的值
//比如下面的语句是错误的
//int sw[10]; //有效 定义一个数组
//sw=sw+1; //无效
}

最后编辑于 2019.02.17 18:33 haijing in hz miss my family

转载于:https://www.cnblogs.com/YiYA-blog/p/10458513.html

研一寒假02-指针_new分配内存_使用new来创建动态数组_使用动态数组_使用delete来释放new分配的内存...相关推荐

  1. 关于C++ delete 来释放new分配的内存

    一般在C语言中我们使用malloc和free进行内存分配和释放,但是在C++中增加了一个新的 new和delete 操作来进行,按照C++的说法delete是释放内存但是指针得到保留,防止内存 泄露, ...

  2. C++ delete只能用来释放new分配的内存

    int jug=5: int * pd=&jug: delete pd://错误,只能使用delete来释放new分配的内存 只能使用delete来释放new分配的内存,不过,对空指针使用de ...

  3. 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)

    如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor faul ...

  4. 【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )

    文章目录 一.字符串 一级指针 内存模型 1.指定大小字符数组 2.未指定大小字符数组 3.指向常量字符串的指针 4.指向堆内存的指针 一.字符串 一级指针 内存模型 #include <std ...

  5. C++类和new、delete操作符和堆和栈内存的分配

    如果你是Java.C#.PHP程序员,那么会对 new 非常熟悉,在这些编程语言中,只能通过 new 来创建对象. 在C++中,你可以像定义变量一样来创建对象,如: Student stu; //对象 ...

  6. 【C/C++动态内存 or 柔性数组】——对动态内存分配以及柔性数组的概念进行详细解读(张三 or 李四)

    目录 前言(栈区.堆区.静态区) 动态内存函数 malloc与free calloc与free realloc与free 常见的动态内存错误 经典笔试题(再见张三) 柔性数组 前言(栈区.堆区.静态区 ...

  7. 二维数组及其二维数组的动态内存分配

    本文为大一时所写的文章(2017/4/9),文笔还很生疏,在很多问题上认识不深,算是在学校的微信公众号上的一个编程探究模块上的投稿,本人当时也参与了本模块的维护和管理.补档. 今天我们来聊聊二维数组及 ...

  8. 各种存储分配算法java代码实现_Java实现操作系统中四种动态内存分配算法:BF+NF+WF+FF...

    1 概述 本文是利用Java实现操作系统中的四种动态内存分配方式 ,分别是:BF NF WF FF 分两部分,第一部分是介绍四种分配方式的概念以及例子,第二部分是代码实现以及讲解. 2 四种分配方式 ...

  9. java分配数组空间使用的关键字_创建数组时为数组元素分配内存空间的 Java 关键字是________(5.0分)_学小易找答案...

    [填空题]若已有数组说明"char s[];",则创建 20 个字符的数组的语句是s=______________; (5.0分) [单选题]下列关于数组的描述错误的是(3.0分) ...

最新文章

  1. poj1410(线段相交问题判断)
  2. VMware 虚拟化编程(15) — VMware 虚拟机的恢复方案设计
  3. oracle如何改变连接属性,怎样设置navicate连接属性
  4. 【Java】函数式编程
  5. 动态代理原理源码分析
  6. springboot 定时器
  7. 协同办公产品好不好用,得看这 25 项指标
  8. 算数运算符与关系运算符_【Flutter 110】Flutter手把手教程Dart语言——运算符
  9. 微服务架构实践之邮件通知系统改造
  10. 蓝桥杯2019年软件类省赛:真题+解答
  11. php编程常用英语词汇,泰牛程序员 PHP编程掌握的英语词汇(3) 韩顺平整理
  12. STM32 标准外设库(STM32F107)
  13. window server 2016 中添加ISCSI硬盘
  14. CTF主办方指南之对抗搅屎棍
  15. MySQL入门系列:查询简介(二)
  16. 深度信念网络_深度学习如何感知跟踪位置变化
  17. 电影html css页面,纯CSS3构建的电影屏幕效果
  18. 语法俱乐部3:动词时态
  19. 关于技术博客--找工作--这些年--陆续的
  20. GFC?一篇管饱(display:grid)

热门文章

  1. 等差素数列(素数筛暴力)
  2. mysql将查到的数据删除_MySQL数据库的基本操作——增、删、改、查
  3. [投资习惯对比]投资大师vs失败投资…
  4. linux 文件系统---类型、创建、
  5. python3基础知识_python3基础知识梳理
  6. 『操作系统』 进程的描述与控制 Part 1 前驱图与程序执行
  7. 图论--拓扑排序--模板
  8. MySql允许被远程访问
  9. [深度学习] Attention机制,一文搞懂从实例到原理
  10. Linux启动时间的极限优化(Z)