笔记:C++学习之旅---指针
一:
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由os回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放。
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放。
<iostream>
namespace
std;
main()
int
*p =
new
int
;
"将3付给p的地址后,指针p读取的值:\t"
<<*p<<endl;
delete
p;
//删除指针以后没有将其置0,将导致后面程序再次对该指针使用,而p和p1是同一块内存地址,所以对p赋值23也意味着重新对p1赋值了
//p =0;//当将p置0为空指针后,再次使用该指针的时候,程序将出现奔溃,所以每次开辟空间的时候必须将该指针赋为空,宁愿报错,也不愿出现后面程序的错误导致很难调试。
"删除空间后,指针p读取的值:\t\t"
<<*p<<endl;
long
*p1 =
new
long
;
//当删除p的内存以后没有将p置0,而当新开辟一块空间时,编译器将释放掉的空间赋给了p1,那么p1也指向了释放掉的空间;
"创建新空间后,指针p中保存的地址:\t"
<<p<<endl;
//p和p1地址相同
"指向新空间的指针p1保存的地址:\t\t"
<<p1<<endl;
//意味着重新给p1赋值了;
"将23付给p的地址后,指针p读取的值:\t"
<<*p<<endl;
// 所以打印的结果p = 23
"将23付给p的地址后,指针p1读取的值:\t"
<<*p1<<endl;
//所以打印的p1 = 23;
delete
p1;
return
0;
<iostream>
namespace
std;
Human
:
"构造函数正在运行...\n"
;
"析构函数正在运行...\n"
;
:
int
i;
main()
Human
*p =
new
Human
;
//在堆中创建一个对象;
delete
p;
return
0;
<iostream>
namespace
std;
Human
:
"构造函数正在运行...\n"
;
"析构函数正在运行...\n"
;
int
const
get()
return
i;
:
int
i;
main()
Human
*p =
new
Human
;
"i的值:"
<<p->get()<<endl;
//p->get();使用->访问成员i;
delete
p;
return
0;
<iostream>
namespace
std;
A
:
void
set(
int
x
)
x
;
//this 指针一般不写,可以写成this->i = x;
"this 变量的保存的内存地址:\t"
<<
this
<<endl;
int
const
get()
return
i;
:
int
i;
main()
A
a;
"对象a的地址:\t"
<<&a<<endl;
//输出的this指针地址和对象a的地址相同,不同的对象this指针地址不同
A
b;
"对象b的地址:\t"
<<&b<<endl;
//输出的this指针地址和对象b的地址相同
return
0;
<iostream>
namespace
std;
A
:
void
set(
int
x
)
x
;
int
const
get()
return
i;
:
int
i;
main()
/*
A
*p =
new
A
;
"p的地址:"
<<p<<endl;
"p的地址:"
<<p<<endl;
A
*
const
p1 =
new
A
;
//如果将其改为const A *p1 = new A;那么就变成了指向常量的指针,那么下一行代码p1->ste(11),将会报错,指针本身可以修改,可以执行p++操作,但是指向的目标常量不可以被修改;
//p1++;//左值是一个常量,意思是p1是常量指针,无法改变;
return
0;
笔记:C++学习之旅---指针的更多相关文章
- 笔记-JavaWeb学习之旅7
JavaScript基础 概念:一门客户端脚本语言,运行在客户端浏览器中,每一个浏览器都有JavaScript的解析引擎,是一个脚本语言,不需要编译,直接就可以被浏览器解析执行. JavaScript ...
- 笔记-JavaWeb学习之旅5
CP30的演示 package cn.itcast.datasourcejdbc; import com.mchange.v2.c3p0.ComboPooledDataSource; import j ...
- ios学习之旅---指针也不难
1.认识指针 #include <stdio.h> //基本数据类型作为函数參数传递是值传递 //void moveFront(int x ,int y) //{ // x = x + 2 ...
- 笔记-JavaWeb学习之旅19
Redis:redis是一款高性能的NOSQL系列的非关系型数据库 NOSQL: Not Only SQL ,意即"不仅仅是SQL",是一项全新的数据库理念,泛指非关系型数据库 r ...
- 笔记-JavaWeb学习之旅18
AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和XML 异步和同步:客户端和服务器端相互通信的基础上 同步:客户端操作后必须等待服务器端的响应, ...
- 笔记-JavaWeb学习之旅17
1.过滤选择器 首元素选择器:first 获得选择的元素中的第一个元素 尾元素选择器:last获得选择元素中的最后一个元素 非元素选择器:not(selector) 不包括指定内容的元素 偶数选择器: ...
- 笔记-JavaWeb学习之旅16
增强对象的功能 动态代理:在内存中形成代理类 实现步骤: 代理对象和真实对象实现相同的接口 代理对象 = Proxy.newProxyInstance(); 使用代理对象调用真实对象的方法 增强方法 ...
- 笔记-JavaWeb学习之旅15
Filter:过滤器 概念:当访问服务器的资源是,过滤器可以将请求拦截下来,完成一些特殊的功能 快速入门: 步骤: 定义一个类,实现接口Filter 复写方法 配置拦截路径 package com.d ...
- 笔记-JavaWeb学习之旅14
JSTL:JavaServer Pages Tag Library JSP标准标签库 if标签 <%@ page import="java.util.ArrayList" % ...
- 笔记-JavaWeb学习之旅10
Servlet server applet运行在服务器端的小程序,servlet就是一个接口,定义了Java类被浏览器访问到的规则(Java类重写这个接口,就可以被浏览器(tomcat)识别) Ser ...
随机推荐
- Linux查看CPU 内存命令
查看CPU 内存命令:https://www.cnblogs.com/ggjucheng/archive/2013/01/14/2859613.html 查看某一进程内存占用:ps -ef 获取PID ...
- List<dto> 转List<map>
/** * list<DTO> 转 list<Map<String,Object>> * * @param list * @param <T> * @r ...
- 【Python】validator进行数据校验
https://pypi.org/project/validator.py/ 校验参数必要性 from validator import Required, In, InstanceOf, Lengt ...
- ElementPlus 表单 resetFields 无效问题解决方法
最近在写一个项目,一个表单递交或者使用resetFields关闭后,再打开,原来的值还存在,后查了一下网上的方法,确定是el-form-item,必须要加prop,其值要与model相同,此问题得到完 ...
- JDK1.8中的时间处理API
相比于JDK1.8之前的SimpleDateFormat以及Calendar等API带来的易误用.线程不安全等问题,JDK1.8提供了LocalDate,LocalTime,LocalDateTime ...
- 网络基础-OSI七层模型
什么是OSI模型 OSI模型(或 Open Systems Interconnection Model开放系统互连模型)是网络中使用的绝对基础模型.这个关键模型提供了一个框架,规定所有联网设备将如何发 ...
- Android笔记--对话框
提醒对话框AlertDialog 具体实现: 相关用法: 日期对话框DatePickerDialog DatePicker 具体实现: 使用Dialog选择日期: 时间对话框TimePickerDia ...
- 使用OpenOffice将office文件转为pdf
0.参考博客:https://blog.csdn.net/weixin_39468112/article/details/89203815 1.首先安装openOffice4.1 2.添加依赖 < ...
- 能让Java开发者提高效率的10个工具
Java受到全球百万计开发者的追捧,已经演变为一门出色的编程语言.最终,这门语言随着技术的变化,不断的被改善以迎合变化的市场需求. 无论你是否拥有一家科技公司,软件已经成为几乎每一个企业不可或缺的 ...
- springboot实现验证码功能
实现验证码功能 先在utils包下创建一个ValidateImageCodeUtils.class package com.wfszmg.demo.utils; import javax.imagei ...