c++学习一:指针基础
1、指针优势,当数据量比较大时,通过指针直接访问数据量所在内存。处理更
加复杂的数据结构。例如:链表、二叉树、图等。
2、指针本质是一种表示内存地址的数据类型,它和整型int和浮点数float一样
只是指针表示是内存地址。
3、c++中两种途径可以访问内存。
i:通过变量名间接访问。为了保存数据,通常先定义保存数据的变量,在
通过变量名间接访问在内存中的数据,进行读写。
ii:另一种就是直接通过内存地址,也就是通过指针来访问内存中的数据。
4、语法格式:数据类型* 变量名;
其中,“数据类型”表示指针所指向的数据是何种数据类型。可以是int、
string、double等基本数据类型,也可以是自定义的结构体等复杂的数据
类型。通常数据类型也称指针的类型。
实际上这两种用法都是合乎c++语法的:
int* pn;//把int*看成一种数据类型,强调pn为这种数据类型的一个变量
int *pn;//*pn看作整体,表示它的数据类型是整数,而pn是指向这个整数的指针
声明多个变量时:
int* p,p1;//可能出错。p是指针,p1是整数
int *p,p1;//这个就清楚一些。*p是一个整数,p是指向这个整数的指针
一般我们都是很规范的一行定义一变量。
5、指针的赋值和使用
得到一个指针变量后,变量的值还是一个随机的值。这个值可能在内存中
无关紧要,也可能是重要数据和代码,如果直接使用很危险,所以在使用
指针之前,必须对其赋值:指针变量 = 内存地址;
6、内存运算符:&和*
&:取地址运算符;
如:int n=100;
int* pn=&n;
*:指针运算符、解析运算符。与&相反,取得指针所指的内容,无论是数据或者程序代码
如:*pn=100;
cout<<*pn<<endl;
特别的:如果指针指向结构体类型的变量,则可以直接用“->”运算符访问结构体变量的成员。
如:Emplyee Wang;
Emplyee* pWang = &wang;
pWang->m_strName = "*Wang";
两个指针可以指向相同的位置,如:
int a;
int* pa = &a;
int* pb = pa;//使用一个已经存在的指针对另外一个指针赋值
最后来个例子总结下:
例:
#include
int main(void)
{
int a = 10;
int *b = &a;
printf("a=%p\n",&a);
printf("b=%p\n",b);
printf("b=%d\n",*b);
return 0;
}
结果:a=0xbf989238;b=0xbf989238;b=10
这里我们又可以学到新的东西就是:
i、指针类型数据并不等同于任何数据类型
ii、用“%d”、“%o”、“%x”及“%u”这几种格式输出指针类型的值是错误的未定义行为
iii、应该用“%p”转换格式输出指针类型的值
如:printf("%p,%d\n",a,*a);
备注:输出变量地址就是%p;
c++学习一:指针基础的更多相关文章
- (转) 学习C++ -> 指针初步
学习C++ -> 指针初步 一.指针 1. 什么是指针? 我们知道, 计算机的内存是由一个个独立的存储单元组成, 并且系统会对每一个存储单元分配一个唯一的号码, 称为这个存储 ...
- C#学习笔记(基础知识回顾)之值传递和引用传递
一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...
- Java学习笔记之---基础语法
Java学习笔记之---基础语法 一. Java中的命名规范 (一)包名 由多个单词组成时,所有字母小写(例如:onetwo) (二)类名和接口 由多个单词组成时,所有单词首字母大写(例如:OneTw ...
- 学习记录-java基础部分(一)
学习记录-java基础部分(一) 参考:GitHub上的知名项目:javaGuide : https://github.com/Snailclimb/JavaGuide/blob/master/doc ...
- 学习java之基础语法(一)
学习java之基础语法(一) 基本语法 编写 Java 程序时,应注意以下几点: 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的. 类名:对于所有的类来说 ...
- Java后端高频知识点学习笔记1---Java基础
Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...
- 这几天开始,先学习一些 java 基础吧,学的有点累
这几天开始,先学习一些 java 基础吧,学的有点累
- Emacs学习心得之 基础配置
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础配置 1.前言2.基础配置 一.前言 本篇博文记录了Emacs的一 ...
- Emacs学习心得之 基础操作
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础操作 1.前言与学习计划2.Emacs基础操作 一. 前言与学习计 ...
- 如何学习FPGA?FPGA学习必备的基础知识
如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA 基础知识 FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...
随机推荐
- C++ STL泛型编程——在ACM中的运用
学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生.两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想.这次想简单说一下STL在ACM中的一些应 ...
- CPU的栈机制的一个小问题
比如要实现下面这个功能. 我们如果要在10000H处写入自行数据2266H,不能用“mov 内存单元, 寄存器”这类指令.怎么做? 代码: mov ax, 1000h mov ss, ax mov s ...
- KSImageNamed 安装后无效解决方法
UIImage的imageNamed提供文件名自动补全功能.使用[UIImage imageNamed:@"xxx"]时,该插件会扫描整个workspace中的图片文件.若安装后无 ...
- MapReduce job.setNumReduceTasks(0)思考
一.概述 在 http://zy19982004.iteye.com/blog/2037549的最后曾经提到过,这里再详细探讨一下. 二.job.setNumReduceTasks(0)唯一影响的是m ...
- MFC编程 | 非模态对话框的定义
因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询. // 非模态对话框的定义 // 通过单文档菜单调用一个非模态窗口 1.首先在工程里插入一个对话框(如:IDD_DLG_TEST ...
- 基于日志数据分析以防御CC攻击的想法
1. What - 什么是CC攻击 CC攻击,即针对应用层HTTP协议的DDos攻击,攻击者在短时间内向目标服务器发送大量的HTTP请求,使得服务器会非常繁忙,资源消耗会增加:同时,如果请求中包含基于 ...
- javascript 正在加载中,请稍后效果实现
/*蒙版*/ .loading-mask { width: 100%; height: 100%; position: fixed; top:; left:; right:; bottom:; bac ...
- 控制HTML Input只能输入数字和小数点
本文介绍两种控制在<input type="text" name="name" value="0" />中只允许输入数字和小数点 ...
- TCP打洞和UDP打洞的区别 (转)
为什么网上讲到的P2P打洞基本上都是基于UDP协议的打洞?难道TCP不可能打洞?还是TCP打洞难于实现? 假设现在有内网客户端A和内网客户端B,有公网服务端S. 如果A和B想要进行UD ...
- cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(二)
cWeb是基于微软的.Net Framework 4框架,数据库是sql server 2008 r2. cWeb开发框架下载,点击这里去下载. cWeb开发框架借鉴三层架构理论分为三层,分别是:cD ...