Atitit.java c++指针使用总结O7
Atitit.java c++指针使用总结O7
3. 避免栈溢出,创建动态数据结构,,大的对象/数组必须使用指针或者静态的变量 2
3. 一个变量包括a.地址(指针) b。命名(引用,别名) c.变量内容..
3
1. 指针的本质
指针并不是因为C语言才有的。寻址、执行这么一个过程就是计算机的基本原理。尽管很多高级语言都没有指针,但程序的运行就是靠着不停的寻址来运行的。可执 行的机器码、全局变量、局部变量和程序返回地址等这三块二进制数都存放在内存中。而只有cpu具有计算功能,他的计算实际上非常弱,每次只能算一个非常简 单的算术运算或逻辑运算(但运算速度惊人)。要把程序代码和变量从内存传到cpu就需要通过找寻数据在内存中的地址,然后通过数据总线和地址总线传进 cpu运算(那两个总线就是实实在在的电线!)。所以如果你了解了程序的机构就可以根据地址去做很多很灵活甚至是很诡异的操作。不仅如此,你想做的所有操 作也都离不开地址。
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. 指针的作用
1. 提升性能问题这常常用于遍历数组,
指针只是一个普通的变量,其值指向一个地址..更精确地说,是其指向值得一个地址号码。
这个地址号码可以被复制, 你可以对其进行加或减法操作。
2. 计算两个指针的的距离
这在使用数组时很有用。这里对数组的便利其实就是迭代器,所以,在实际代码 时,指针可以代替迭代器使用。
但是,从多年C++开发经验来看,几乎没有用到针对指针的计算操作。
指针真正的用途是被用于完成下列3种任务:
3. 避免栈溢出,创建动态数据结构,,大的对象/数组必须使用指针或者静态的变量
指针正好可以用来解决这个难题。使用指针您能够创建动态数据结构。这时内存将在程序运行的时候从堆上分配,而不用一开始就声明数组的最大规模。这样您就可以为每个文档准确地分配内存而不会产生浪费。而且,关闭一个文档时您还可以把它占用的内存返回给堆,以供程序的其他部分使用。使用指针,内存就可以在程序运行期间不断被回收利用。
可以直接把数组定义改成指针,然后动态申请内存;也可以把局部变量变成全局变量,一个偷懒的办法是直接在定义前边加个static,
函数里定义了一个局部变量,是一个类对象,该类中有一个大数组,大概是1.5M。
Windows程序的内存机制大概是这样的,全局变量(局部的静态变量本质也属于此范围)存储于堆内存,该段内存较大,一般不会溢出;函数地址、函数参数、局部变量等信息存储于栈内存,VC6中栈内存默认大小为1M,对于当前日益扩大的程序规模而言,稍有不慎就可能出问题
4. 灵活性
。所以如果你了解了程序的机构就可以根据地址去做很多很灵活甚至是很诡异的操作。不仅如此,你想做的所有操 作也都离不开地址。
3. 一个变量包括a.地址(指针) b。命名(引用,别名) c.变量内容..
4. 指针跟引用的区别
指针是一个变量的地址,引用是一个变量的别名。
1. 指针是一个地址编号,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3.引用是操作受限了的指针(仅容许取内容操作)。
4.指针用操作符‘*’和‘->’,引用使用操作符‘.’
5.指针是用来指向某个变量,而引用是给变量取个别名,其作用就如同typedef一样。
6.所以引用访问对象是直接访问。指针访问对象是间接访问。
7.两者在作为形参的时候非常相似,区别是指针拷贝副本,引用不拷贝。
8.一般使用引用来指向一个基本类型,, 使用指针来指向对象(包括数组).. 也可以使用引用指向对象,可能他是存储在stack中的,尺寸限度(1-2M),所以,大的对象会stack full 或者不能access 内存(内存越过限度)..
这个checked in O79
5. ////////////c++中的指针..
在C++里优先选择引用类型作为形参,因为操作一个变量比操作一个指针要简单的多
但用指针作为形参的好处是它可以通过自增或自减改变它的指向
用引用作形参时在调用函数里就像操作实参一样,不需要考虑实参的地址问题
用指针做形参时,由于指针的值是变量的地址,所以要通过对地址解引用来操作其所指的变量
例:int a=10;//a存放在存储空间的地址为:0x000009
int &b=a;//b就是a的引用,此时b 的值也为10
int *ptra=&a;//ptra就是a的指针,其值为0x000009
6. ////////////java中的指针
5. this指针
6. 获得变量的指针
//定义变量包装类.
IntByReference intRef=new IntByReference(9);
//获得变量的值(( 9 ))
System.out.println(intRef.getValue());
//获得变量的指针包装对象..
Pointer pointer = intRef.getPointer();
System.out.println(pointer );
//allocated@0x571b48 (4 bytes)
//---------------------------------
int addr = pointer.hashCode();
System.out.println("Add:"+addr);
//打印出指针(地址)..
// Add:3283784 (0x571b48)
7. 通过指针解引用变量/对象
int addr=0x571b48;
Object o=p(addr);
>>>>>> GloableMap.get(addr)
7. 参考
paip.指针 引用 c++ java的使用总结. - attilax的专栏 - 博客频道 - CSDN.NET.htm
paip.c++ 指针跟引用的区别.
C++中的- 和.的问题?_百度知道.htm
指针和引用有什么区别 请写一个简单的程序说明_百度知道.htm
指针和引用的区别_百度知道.htm
Atitit.java c++指针使用总结O7的更多相关文章
- Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针 1.1. java方法引用(Method References) 与c#委托与脚本语言js ...
- Atitit.java jna 调用c c++ dll的原理与实践 总结 v2 q27
Atitit.java jna 调用c c++ dll的原理与实践 总结 v2 q27 1. Jna简单介绍1 2. Jna范例halo owrld1 3. Jna概念2 3.1. (1)需 ...
- Atitit.java jna 调用c++ dll 的总结
Atitit.java jna 调用c++ dll 的总结 1. JNA技术解密1 1.1. JNA工作原理1 2. JNA技术难点 Java—C和操作系统数据类型的对应表1 2.1. 1 2.2. ...
- Atitit java onvif 开源类库 getProfiles getStreamUri
Atitit java onvif 开源类库 getProfiles getStreamUri 1. ONVIF Java Library by Milgo1 1.1. https://github. ...
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...
- Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用)
Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用) 1.1. Keyword1 1.2. 前言1 2. Java项目使用.Net的aspx页面view1 ...
- Atitit java集成内嵌浏览器与外嵌浏览器attilax总结
Atitit java集成内嵌浏览器与外嵌浏览器attilax总结 HTML5将颠覆原生App世界.这听起来有点危言耸听,但若认真分析HTML5的发展史,你会发现,这个世界的发展趋势确实就是这样. 熟 ...
- Atitit.java c#这类编程语言的设计失败点attilax总结
Atitit.java c#这类编程语言的设计失败点attilax总结 1. Npe1 2. Api粒度过小而又没有提供最常用模式1 3. checked exception(jeig n jyejy ...
- Atitit java 二维码识别 图片识别
Atitit java 二维码识别 图片识别 1.1. 解码11.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.11.3. 二维码的样例:21.4. 定位图案21.5. 数 ...
随机推荐
- The certificate used to sign “AppName” has either expired or has been revoked. An updated certificate is required to sign and install the application解决
问题 The certificate used to sign "AppName" has either expired or has been revoked. An updat ...
- 错误:Method not found: 'Void System.Web.UI.ScriptResourceDefinition.set_LoadSucce
vs2012开发,再把.net 4.5降成4.0.部署到2003 服务器上就报错了. 在网上查了下,老外说:这个方法.net4.0不支持. 后面发现是发布方式错了,用项目里的发布,不要直接拷贝文件过去 ...
- 跨进程(同一app不同进程之间通信)——Android自动化测试学习历程
视频地址:http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=877122&co ...
- python获取DBLP数据集
#!/usr/bin/python # -*- coding: UTF-8 -*- import xml.sax import io, sys paper_tags = ('article', 'in ...
- std::reverse_iterator::base
google chromium base MRU_Cache 支持反向erase iterator Erase(iterator pos) { deletor_(pos->second); ...
- 常见的HTTP 状态代码
HTTP 状态代码 如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在 Googlebot 抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响 ...
- 第六章 springboot + 事务
在实际开发中,其实很少会用到事务,一般情况下事务用的比较多的是在金钱计算方面. mybatis与spring集成后,其事务该怎么做?其实很简单,直接在上一节代码的基础上在相应的方法(通常是servic ...
- PHP开发模式之代理技术
在实际开发中,我们经常要调用第三方的类库如SOAP服务等.使用这些第三方 组件并不难,最麻烦的莫过于调用了,一般的调试手段最方便的莫过于记日志了. 示例: 假如有以下第三方类库. // filenam ...
- 对比poj3050
#include <stdio.h> const int MAXN = 10; const int dir[4][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, ...
- freeCodeCamp:Truncate a string
截断一个字符串! 如果字符串的长度比指定的参数num长,则把多余的部分用...来表示. 切记,插入到字符串尾部的三个点号也会计入字符串的长度. 但是,如果指定的参数num小于或等于3,则添加的三个点号 ...