指针和引用JoeChenzzz

复合类型是指基于其他类型定义的类型,指针和引用就是复合类型

指针是一种复合类型,它指向某个对象,它本身也是一个对象,指针的值是它指向对象的地址,同时指针也有它自己的地址

voidfunc(int*p){intm_value=1;p=&m_value;}intmain(){intn=2;int*pn=&n;cout<<*pn<

指针大小是由CPU实际运行的寻址位数决定,与所指向的对象的类型无关,寻址位数为16位则为2字节,32位为4字节(通常情况下),64位为8字节

不指向任何对象的指针,它的值为NULL

1)取地址符&

2)解引用符*

同类型的指针可以比较,不同类型的指针比较会报错

引用仅仅是给对象起了一个别名,实质上跟原来的对象是同一个东西;定义引用时,必须初始化

所以有这么一种说法:引用的底层是通过类似指针的方式实现的

intmain(){inta=1;int&b=a;cout<<"a:address->"<<&a<"<<&b<0031FD54b:address->0031FD54引用b的地址和变量a的地址一样,这种方法不能得到引用b的地址

intmain(){intx=1;inty=2;int&b=x;printf("&x=%x,&y=%x,&b=%x,b=%x\n",&x,&y,&y-1,*(&y-1));return0;}运行结果:&x=12ff7c,&y=12ff78,&b=12ff74,b=12ff7c引用b的地址可以间接通过&y-1来得到b的地址;*(&y-1)就是b的值,从结果可以知道,b的值即x的地址,从而可以知道,从底层实现来看,引用的确存放的是被引用对象的地址,只不过,这些对于高级程序员来说是透明的,编译器屏蔽了这些细节

1)值传递:发生拷贝,形参是实参的拷贝,改变形参的值并不会影响实参的值

2)指针传参时,函数会创建一个副本指针(局部变量),这个副本指针的值和实参的值相同,副本指针的地址和实参的地址不同,函数可以通过副本指针对实参指针所指向的对象进行操作

3)引用传参时,从底层看,形参其实也是作为局部变量在栈中开辟了空间,这个局部变量真实存放的其实是实参的地址(可从汇编层看到),在函数体内任何对形参的操作都会通过间接寻址的方式(即通过这个存放的地址去访问主函数中的实参)影响到主函数的实参;但是编译器隐藏了这些细节,通过编译器查看,形参和实参的地址相同,形参和实参的值也相同

THE END
1.20190919数组&字符串&结构体&共用体&枚举这个宏返回的就是指向整个结构体变量的指针,类型是(type *)。 short*p=&(s1.c);structmystruct*pS=NULL;pS=container_of(p,structmystruct,c)//通过p来计算得到s1的指针 (1)作用:知道一个结构体中某个元素的指针,反推这个结构体变量的指针。有了container_of宏,我们可以从一个元素的指针得到整个结构体变量...https://www.jianshu.com/p/807de5183fb1
2.Windows7系统高阶鼠标调试详解在Windows 98中(至少Win98),OS内部对于加速度、速度缩放的多重计算会导致指针的分数移动,也就是说指针移动的计算结果不一定是整数。这一计算结果被分为整数和分数余数两部分,整数由结果取整得到,分数即不足一像素的余数部分,一般与整数同号。系统内部储存分数部分,并追加到下一次指针移动计算结果上。举例来说,比如...http://www.360doc.com/content/18/1228/21/31791761_805146796.shtml
1.C指针——知识点大全(详细,简洁,含例题)指针c前言:大家好,这里是YY;此篇博客主要是指针的知识点;包含【一二级指针】【字符指针】【指针数组】【数组指针】【以上知识的实际应用】【函数指针】【函数指针数组】 PS:创作不易,每个知识点都有例题或者图帮助理解;如果对你有帮助,希望能够得到您的关注,赞,收藏,谢谢! https://blog.csdn.net/YYDsis/article/details/130534787
2.一文让你不再害怕指针之C指针详解(经典,非常详细)C语言这篇文章主要给大家介绍了C指针的相关资料,文中介绍的很经典,非常详细,文中通过示例代码介绍的非常详细,对大家学习或者使用C指针具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧https://www.jb51.net/article/168671.htm
3.指针函数和函数指针(附实例详解)腾讯云开发者社区指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。 主要的区别是一个是指针变量,一个是函数。在使用是必要要搞清楚才能正确使用。 1、指针函数:带指针的函数,即本质是一个函数。函数返回类型是某一类型...https://cloud.tencent.com/developer/article/2030119
4.最详细的指针详解C语言从入门到精通指针 1.指针是什么? 指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是**内存地址**,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅...https://blog.51cto.com/u_15612474/5828245
5.数据结构实习报告(精选3篇)为实现上述程序功能需建立单向循环链表以存储此结构,出列操作的模块主程序模块循环链表的创建模块,申请一个空间将头指针和指针均指向第一个结点分配存储空间失败,子函数依次出列并释放结点的空间。https://www.oh100.com/bg/a/201610/477545144175.html
6.利用相机SDK采相转换至HImage机器视觉视觉检测设备从像素指针创建图像,即得到像素的内存指针(PixelPointer),已知图像的类型(ColorFormat)、尺寸(ImageWidth、ImageHeight)就可将其转化为HImage。 gen_image1适合于单通道图像转化,gen_image3转化需要分别知道RGB三个通道的指针,gen_image_interleaved转化需要知道图像的内存的总指针以及图像的格式。 https://www.0755vc.com/2841.html
7.比特币原理登链社区区块链技术社区2、单项不可逆运算,即已知 x 和 sha256函数可以算出 y 的值,但是已知y不能逆运算出x。3、计算结果不可预测,就是哈希值不能预测出回出现在某个区间内,如果想要得到一个哈希值处于某个区间范围内,没有什么好办法,只有一个一个输入x试过去。 Hash pointer(哈希指针)...https://learnblockchain.cn/index.php/article/5040
8.4指针变量的引用指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。 指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误。 在C语言中, 变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址。 https://cooc.cqmu.edu.cn/Course/KnowledgePoint/5008.aspx
9.this指针MicrosoftLearnthis 指针是一个编译器生成的指针,指向非静态成员函数中的当前对象。https://docs.microsoft.com/zh-cn/cpp/cpp/this-pointer