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++:提升_指针的指针和指针的引用 写在前面 今天在使用指针的时候我发现了一个自己的错误.
随机推荐
- Entity FramWork Code first 使用心得
1 最有用的命令 update-database -force -verbose 2 主键如果不是默认的int或者 bigint而是guid 或者 string类型,创建记录的时候要给主键赋值 3 在 ...
- LeetCode 1.两数之和(JS)
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- ignore users and roles by filter in sql source control
https://www.red-gate.com/hub/product-learning/sql-source-control/source-controlling-database-permiss ...
- Golang1.8编译静态库给C使用
Go实例代码: package main import ( "fmt" ) import "C" //export Printf func Printf(for ...
- 2-11 tensorflow常量变量定义
D:\Users\ZHONGZHENHUA\Anaconda3\envs\tensorflow\Lib\site-packages\tensorflow https://developer.nvidi ...
- springMVC实现基本文件夹压缩下载功能
将文件夹压缩后下载: @Slf4j public class Test { private static final String BASE_PATH = "/root/doc/" ...
- (转)IE内存泄露,iframe内存泄露造成的原因和解决方案
http://my.oschina.net/jsan/blog/11169 http://blog.csdn.net/tianma630/article/details/8502395 jQuery ...
- 【原创】Elasticsearch无宕机迁移节点
官方API文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/allocation-filtering.html 参考 ...
- hihoCoder 扩展二进制数
明天就要去实验室干活了....下次再打题不知是何时.... 题目链接: http://hihocoder.com/contest/hihointerview11/problem/2 这题不难,一开始想 ...
- bzoj 1997: [Hnoi2010]Planar【瞎搞+黑白染色】
脑补一下给出的图:一个环,然后有若干连接环点的边,我们就是要求这些边不重叠 考虑一下不重叠的情况,两个有交边一定要一个在环内一个在环外,所以把相交的边连边,然后跑黑白染色看是否能不矛盾即可(可能算个2 ...