[C++]指针浅析
Date:
2014-1-4
summary:
指针的简单理解,概念性的东西会比较多(100个人有100种理解,此处只代表我个人看法)
Contents:
1.什么是指针
c++ primer plus中提到,变量是在编译时分配的有名称的内存,而指针只是为了可以通过名称直接访问内存而提供了一个别名。指针的真正用武之地在于:在运行阶段分配未命名的内存以存储值。
2.指针和指针变量
在工作沟通交流中,嘴里一直说得指针,其实是[指针变量]的简称,它是一种数据类型,一种复合的数据类型,使用int*来声明,用于存储内存地址。
所以,在我们平时工作讨论问题时所说的“指针”,通常就是指针变量
3.使用指针
a).特定类型的指针只能指向对应的数据类型(void* 可以指向任何类型)
b).指针一般配合[取地址操作符]和 [解引用操作符]使用
c).指针的size由计算机硬件决定,同一台计算机中,指针的size一致,不会因为它所指向的数据类型不同而不同
d).指针可以做运算操作。
(这里并没有提到New和Delete操作符,因为个人认为它们是内存管理相关,不应在此处谈论,这样Focus的点就在于指针本身与内存管理无关,这样会清晰一点)
Ex:
// a)
//运行时创建了一个int类型的变量(一块内存空间),指针p1帮助我们可以访问这块内存空间的值,这就是指针存在的意义
int* p1 = new int(10);
cout << "运行时创建的数为:" << (*p1) << endl; //因为p1,我们可以访问它指向的内存空间,所以我们可以通过它修改内存空间的值
(*p1)+= 100; cout << "修改新创建的内存空间,它的指为:" << (*p1) << endl;
delete p1;
p1 = nullptr; // b)
double doubleNum = 1.23;
int intNum = 123; p1 = &intNum;
// p1 = &doubleNum; //编译器报错,指针变量类型应该与所指向的变量类型一致
cout << "p1指向的新内存空间的值为:" << (*p1) << endl; // c)
cout << "本台计算机中,使用" << sizeof(p1) << "个字节存储一个指针变量" << endl; // d)
int arrayInt[] = {1,2,3,4,5};
p1 = arrayInt;
cout << "p1指向的空间的指为:" << (*p1) << endl; // 对指针做运算
p1 += 3; cout << "运算操作后,p1指向的空间的指为:"
<< (*p1)
<< "与之前相比,指针向它的连续内存空间移动了3个单元,偏移量为:"
<< sizeof(p1) * 3 << "个字节"
<< endl;
Notes:
nothing
THE END
[C++]指针浅析的更多相关文章
- C++ 智能指针浅析
C++ 智能指针浅析 为了解决 C++ 中内存管理这个老大难问题,C++ 11 中提供了三种可用的智能指针.(早期标准库中还存在一种 auto_ptr,但由于设计上的缺陷,已经被 unique_ptr ...
- c++学习笔记—动态内存与智能指针浅析
我们的程序使用内存包含以下几种: 静态内存用来保存局部static对象.类static数据成员以及定义在任何函数之外的变量,在使用之前分配,在程序结束时销毁. 栈内存用来保存定义在函数内部的非stat ...
- 取地址与解引用 C指针浅析
C语言指针入门需要掌握的两个概念就是取地址&和解引用*,下面我们按例子来理解这两个符号的使用. int main() { int a = 0; int* pa = &a;//取地址操作 ...
- C++ 指针与引用 知识点 小结
[摘要] 指针能够指向变量.数组.字符串.函数.甚至结构体.即指针能够指向不同数据对象.指针问题 包含 常量指针.数组指针.函数指针.this指针.指针传值.指向指针的指针 等. 主要知识点包含:1. ...
- 浅析C语言指针问题
首先明白c语言操作符的优先级及结合性就很容易理解了. 链接 1.关于char *s 及 char s[] char *s指向的是一个字符串对象的指针,可以理解为间接引用,比如 char *s = “1 ...
- 浅析指针(pointer)与引用(reference)
在c++函数中,形式参数用引用和用指针都可以起到在被调用函数中改变调用函数的变量的作用.什么时候用引用作参数?什么时候用指针作参数呢 void function (int *ptr); void fu ...
- 新手学习之浅析一下c/c++中的指针
一.我们先来回忆一下指针的概念吧,方便下面的介绍 指针是存放地址值的变量或者常量.例如:int a=1;&a就表示指针常量(“&”表示取地址运算符,也即引用).int *b,b表示的是 ...
- 浅析C++中的this指针
转自:http://blog.csdn.net/starlee/article/details/2062586 有下面的一个简单的类: class CNullPointCall { public: s ...
- 转:浅析C++中的this指针
原文出处:http://blog.csdn.net/starlee/article/details/2062586 有下面的一个简单的类: class CNullPointCall { public: ...
随机推荐
- Python与开源GIS:在OGR中使用SQL语句进行查询
摘要: 属性选择与空间选择都可以看作是OGR内置的选择功能,这两种功能可以解决大部分实际中的问题.但是也有这种时候,就是进行查询时的条件比较复杂.针对这种情况,OGR也提供了更加灵活的解决方案:支持使 ...
- 改动项目APP名字后,在真机执行报错:The provisioning profile specified in your build settings (“haotian”) has an AppI
错误提醒:The provisioning profile specified in your build settings ("haotian") has an AppID of ...
- Swift语言Storyboard教程:第一部分
更新记录: 该Storyboard教程由Caroline Begbie更新iOS 8和Swift相关内容.原文作者为教程编纂组的成员Matthijs Hollemans. 2014/12/10更新: ...
- Python 30分钟入门——数据类型 & 控制结构
Python是一门脚本语言,我也久闻大名,但正真系统的接触学习是在去年(2013)年底到今年(2014)年初的时候.不得不说的是Python的官方文档相当齐全,假设你是在Windows上学习Pytho ...
- PHP - 验证用户名
/** * * 函数名:_check_username($user_str,$min_num,$max_num); * 作用:检测用户名是否符合格式 * 参数: * 1:用户名 * 2:不得小于多少位 ...
- 11.ThinkPHP 3.1.2 连贯操作
==================================================== 一.常用连贯操作 1.where 帮助我们设置查询条件 2.order 对结果进行排序 $ar ...
- IT段子,娱乐一下
1.我是个程序员,一天我坐在路边一边喝水一边苦苦检查bug.这时一个乞丐在我边上坐下了,开始要饭,我觉得可怜,就给了他1块钱,然后接着调试程序.他可能生意不好,就无聊的看看我在干什么,然后过了一会,他 ...
- 可执行程序的入口点在那里?(强化概念:程序真正的入口是mainCRTstartup)
今天终于有时间来研究一下一个很大很大的工程编译成一个exe和若干dll后,程序是如果执行它的第一条指令的?操作系统以什么规则来找到应该执行的第一条指令(或说如何找到第一个入口函数的)? 我们以前写wi ...
- 基于visual Studio2013解决面试题之0603调整数组
题目
- 【Demo 0007】Android 信使(Intent)
本章学习要点: 1. 了解Intent功能作用: 2. 掌握Intent在显示和隐示基本使用方法及规则: