C++ 引用、指针
一、引用
1.引用的作用:给变量起一个别名,是c++对c的扩充。原名和别名有相同的地址,根本上就是同一个东西,只是名字不一样。c++的引用机制主要是为了用作函数参数,增强函数传递数据的能力,比如swap函数,引用就是为了直接修改实参。
2.声明方式:
int a;
int &b=a;
&紧跟在数据类型后,即为引用声明符,其他地方为取地址符。
3.与指针区别:
声明一个引用时必须同时初始化,之后不能再修改,指针不用;
引用初始化后不能再改变,指针可以;
引用不能指向空值,指针可以;
不能引用数组或数组元素;
不能建立引用的引用;
指针不能指向引用;
二、函数参数指针
1.调用函数时不会改变指针的值,但可能会改变指针指向的值。
三、数组指针
1.假设指针p已指向数组中某一元素,则p+i指向该元素的下i个元素,实际上,p+i=p+i x sizeof(DataType)。
2.c++是将函数形参里的数组当做指针来处理的,也就是函数调用时不存在数组,只有指针。
四、字符串指针
1.字符串的一种定义方式:
char str[]="asdasd";
定义时可以不写元素个数,但必须初始化,int 啥的也可以这样定义,然后就会自动识别个数,char的话最后会加上'\0'。
2.char*定义的字符串可用[]来访问,但不能修改。
五、函数指针
1.指向函数的指针一定要用"()",比如(*p),这是因为优先级的问题,如果没有括号就成了返回值为指针的函数了。如int *a(int x,int y),就是返回值为指针的函数。
2.指向函数的指针可以作为函数的参数,这是为了将函数名传给函数形参,就可以在调用一个函数时根据不同的实参再调用别的函数,这种用法很少见。
六、指针数组
1.int *p[4]=(int *) p[4]即为指针数组,数组中元素是指针类型的。
int (*p)[4]为指向数组的指针,数组中元素是int。
七、void *指针
1.(void *)指针类型是指向不确定的类型而不是任何类型,必须转换为确定的类型才能使用,所以只是一个过渡。
2.可以把非void *赋给void *,但不能反过来。
e.g.
int a=89;
int *p1=&a;
void *p2;
p2=(void *)p1;
*(int *)p2即为a;
C++ 引用、指针的更多相关文章
- perl5 第十二章 Perl5中的引用/指针
第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用 子程序模板七.数组与子程序八.文件句 ...
- C++ const 引用 指针
先简单回忆一下常量的性质: int main() { const int buffSize = 512; buffsize = 512; //× buffSize是常量 } 初始化时: const i ...
- 引用&指针交换函数实践
实践如下: #include <iostream> using namespace std; // 普通交换,注意这里的ab值,在具体调用时是基本数据的拷贝,原始数据不会变化 // 因此这 ...
- c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针
1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...
- C++ Primer 第二章 引用 指针 const限定符
1.引用: 为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d也就是声明的变量名(声明符就是变量名). PS:1.通过图片中编译所提示的报错信息 ...
- C++引用指针 & 构造函数
近来回转 C++的学习,脑子又被搞得了一团迷(简直不要忘得太快..... ) 过后静下来想一想,还是因为有些东西没搞清楚导致,所以理了理两个容易搞迷糊的地方. 1. 引用与指针 C++进行传值更 ...
- 子类父类(虚函数下的 引用指针 对象)->看来没有子类指针这回事
#include<iostream> using namespace std; class Father { public: Father() { cout << " ...
- python3.x 类似cpp引用指针传参修改
#同名局部变量调用外部全局变量: num=100def fun(): global num#告诉编译器是全局的num num+=100 print(num)print(fun)print(fun()) ...
- C++ 引用 指针 使用举例
1. 请看下程序 inline void CScanLineFill::removeOldNodeAET(AET* &aetList, const float yCurrent) { AET* ...
- C/C++:提升_指针的指针和指针的引用
C/C++:提升_指针的指针和指针的引用 写在前面 今天在使用指针的时候我发现了一个自己的错误.
随机推荐
- call function
1 call递归扩展变量 本质上仍然是变量扩展,等价于$(),只不过扩展的时候带了参数,$(call xxx)返回的是xxx扩展之后的值.参数依次赋值给$(1),$(2)......,但是参数要在赋值 ...
- Strus2中关于ValueStack详解
什么是ValueStack 它是一个接口com.opensymphony.xwork2.util.ValueStack.我们使用它是将其做为一个容器,用于携带action数据到页面.在页面上通过ogn ...
- Struts2中ValueStack结构和总结
[ValueStack和ActionContext的关系] 首先,从结构上来看ValueStack是ActionContext的一个组成部分,是对ActionContext功能的扩展.ActionCo ...
- 在VS2010下使用AppFace
AppFace的介绍网上一大堆,此文仅为自己作个记录,方便以后查看. 一.需要的文件:1.AppFace.h 2.appface.lib 3.appface.dll 4.macosx_af.urf ...
- YTU 1010: 目标柏林
1010: 目标柏林 时间限制: 1000 Sec 内存限制: 64 MB 提交: 32 解决: 15 题目描述 1945年初,苏军和英美联军已从东西两面攻入德国国境. 4月初,在苏军和英美联军的 ...
- jQuery简单纯文字提示条
如何制作jQuery简单纯文字提示条,先介绍提示条(tooltip)的意思是用户鼠标悬停经过事件发生提示title.它们已经呈现在大多数浏览器中,当你可以提供一个链接或图片的title属性,就是用户将 ...
- inserting a large number of records with SQLiteStatement.
Below is a demo application I wrote that creates 100 records programmatically, inserts them using on ...
- gfnormal 域名 是阿里云的高防IP
最近DGA检出了一堆阿里高防的域名,例如:u3mbyv2siyaw2tnm.gfnormal09aq.com,然后专门查找了下相关文档. 例如 8264.com 这个网站启用了aliyun的高防DDo ...
- I.MX6 wpa_applicant 开启 debug 输出
/*********************************************************************** * I.MX6 wpa_applicant 开启 de ...
- 实现的是Linux和Windows之间的一种共享--samba
samba 基本配置及自定义控制 https://www.cnblogs.com/l-hh/p/9473937.html Samba简介: Samba实现的是Linux和Windows之间的一种共享, ...