C++ 指针的引用和指向引用的指针】的更多相关文章

前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否都觉得头大了,不过我就暂时不在博客中讲解这些内容了,我只讲述在iOS开发中指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指…
本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 回到顶部 前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否…
指向引用的指针 简单使用指针的一个例子就是: int a = 1; int *p = &a; 预先强调: 没有指向引用的指针 原因: 因为引用 不是对象,没有地址. 但是指向引用的指针是什么形式呢?是对一个引用进行如下取地址吗? int v = 1; int &ri = v; // 整型变量v的引用 int *p = &ri; // 这是指向引用的指针吗? 事实上不是,这是一个普通的整型指针,虽然我们说引用没有地址,但是对引用ri的操作实际上是对v的操作.这是是定义了一个整型指针p…
#include <iostream> using namespace std; class A { public: int i; int j; } int main() { const A* a = new A(); A* a1; a1 = a; } 这个是有道理的,能够这么做的话,const中内容就会被改变.…
函数指针是指指向函数而非指向对象的指针.像其他指针一样,函数指针也指向某个特定的类型.函数类型由其返回类型以及形参表确定,而与函数名无关: // pf points to function returning bool that takes two const string references bool (*pf)(const string &, const string &); 这个语句将 pf 声明为指向函数的指针,它所指向的函数带有两个 const string& 类型的形…
前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针   一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) eg: char * upper(参数){} 返回指向char型的指针变量 比如下面这个函数,返回一个指向char类型变量的指针 1 // 需求:将字符串str中的小写字母变成大写字母,并返回改变后的字符串 2 // 注意的是:这里的参数要传字…
一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的指针加 N 后,指针会指向 N 个之后的元素. #include <stdio.h> int main(void) { int array[5]; int *p; int i; /* 给数组 array 的各元素设定值 */ for (i = 0; i < 5; i++) { array[i…
一.指向函数的指针 函数名可以在表达式中被解读成“指向函数的指针”,因此,正如代码清单 2-2 的实验那样,写成 func 就可以取得指向函数的指针. “指向函数的指针”本质上也是指针(地址),所以可以将它赋给指针型变量. 比如有下面的函数原型: int func(double d); 保存指向此函数的指针的变量的声明如下: int (*func_p)(double); 然后写成下面这样,就可以通过 func_p 调用 func, int (*func_p)(double); // 声明 fun…
(另:关于"引用"更具体的讨论.见此.) 由做UVa133引发的一系列问题及讨论 1.引用类型    C++ Primer P51 引用就是对象的还有一个名字,使用多个变量名指向同一地址. 实际程序中.引用主要用作函数形參. 复合类型.不能定义引用类型的引用,但能够定义不论什么其它类型的引用. 格式: 类型名&  标示符=已声明的常变量; 2.引用形參    C++ Primer P201-205 非引用形參有普通的.指针形參.const形參(可传const对象或非const对…
我们来看一个简单的指向引用的指针的样例. #include <iostream> using namespace std; int main(){ int x=10; int y=20; int &rtx=x; //不要写成了int& *ptrx=&rtx; //由于rtx的本质是一个int int *ptrx=&rtx; *ptrx=15; ptrx=&y; rtx=y; cin.get(); } 依次单步运行:(注意rtx值的变化和ptrx的变化)…
1. const指针和 指向const的指针 指向const的指针: 不允许通过指针来改变其指向的const值 const double *cptr *cptr = 42;  // error! 指针代表的值无法修改 const double pi =3.14 double *ptr = &pi //error ! 无法将指向const的指针赋值给非非const指针: const double *cptr = &pi //ok const 指针:本身值无法修改,即指针指向的地址无法修改 i…
#include <iostream> #include<algorithm> using namespace std; class Test { public: Test(int num) { this->num = num; } public: int num; }; //引用 void change0(Test& t) { t.num = 2; Test temp(3); t=temp; Test test(4); t=test; // t = new Test…
一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧).最近花了点时间认真看了智能指针,特地来写这篇文章. 1.智能指针是什么 简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作.具体而言,复制对象时,副本和原对象都指向同一存储区域,如果通过一个副本改变其所指的值,则通过另一对象访问的值也会改变.所不同的是,智能指针能够对内存进行进行自动管理,避免出现悬垂指针等情况. 2.普通指针存在的问题 C语言.C++语言没有自…
指针变量是包含内存地址的变量.一般的变量直接包含一个特定的值,而指针变量包含的是某一特定数据类型的内存地址.普通变量直接引用其中的值,指针变量则间接引用所指向内存地址中的值.指针变量在使用前需要声明与初始化. 4.5.1 指针变量的定义 指针变量定义时,需要指定所指向的数据类型.声明指针变量的一般形式为: 数据类型  *变量名 “*”运算符通常称为 间接运算符 或 间接引用运算符,在声明中以这种方式使用间接运行符时,它用以表明被声明的变量是指针变量.如下例所示: int *pi; // 声明一个…
在c++函数中,形式参数用引用和用指针都可以起到在被调用函数中改变调用函数的变量的作用.什么时候用引用作参数?什么时候用指针作参数呢 void function (int *ptr); void function(int &ref); 没有 特定的规定..学的 久了,就 会习惯什么时候用指针什么时候用引用了! 从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变.而引用是一个别名,它在逻辑上不是独立的,它…
Java的引用本质上就是C中的指针,而c++的引用则完全不同:有一个类 class Point { int x; int y;} 同样的一个Point p; 在Java中p表示一个引用,它等同于C语言中 struct Point *p中的p,和C++中的Point *p 的p相似.为什么说相似呢?这里有一个非常需要注意的地方,在Java Point p或者C中 struct Point *p只是声明了变量,并没有分配空间,一定要调用new Point()或者 malloc这样的语句分配空间后才能…
引入 C语言中函数有两种传参的方式: 传值和传址.以传值方式, 在函数调用过程中会生成一份临时变量用形参代替, 最终把实参的值传递给新分配的临时变量即形参. 它的优点是避免了函数调用的一些副作用, 但是它无法改变实参的值.函数调用完成之后实参的值不会发生改变, 如果要改变实参的值, 只能通过指针传地址过去. void swap (int left, int right) { int temp = left; left = right; right = temp; } void swap (int…
1.引用.常量引用 引用主要被用做函数的形式参数--通常将类对象传递给一个函数. 引用在内部存放的是一个对象的地址,它是该对象的别名.引用不占用内存,因为取地址引用的值和被引用变量的地址相同.但是objdump –d xx底层编译器实现其实还是指针. (1)引用必须初始化. 但是用对象的地址初始化引用是错误的,我们可以定义一个指针引用. ; ; //错误.非常量引用的初始值必须为左值 int &re = ival; //ok int &re2 = &ival; //错误.不可用对象…
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型  &引用名 = 变量名: 例如:int a=1;  int  &b=a;// b是a的别名,因此a和b是同一个单元 注意:定义引用时一定要初始化,指明该引用是谁的别名 在实际应用中,引用一般用作参数传递与返回值 引用不是变量,引用仅仅只是变量的别名,引用没有自己独立的空间,引用要与它所引用的变量共享空间,对引用所做的改变实际上是对它所引用的变量的改变,引用在定义的时候要进行初始化,引用一经初始化,不能重新指向其他变量. (…
非const引用,只能用object为其赋值: <c++primer>P52 而const引用则可以用临时变量为其赋值: 如: const int &r = 32://可以 int &rr = 32 // error 而且: 非const引用只能绑定到与该引用同类型的对象: const引用则可以绑定到不同但相关的类型的对象或绑定到右值://左值:可以出现在赋值语句的坐标或右边:右值:只能出现在赋值的右边. 当进行string对象和字符串字面值混合连接操作是,+操作符的左右操作数…
https://blog.csdn.net/yangfanzn/article/details/44731391 1-php和c中的变量名都会被解析成内存地址,变量名所代表的内存的地址中内容即代表变量的内容,但由于指针的跳转,这个内容往往并不那么明显 2-在c中不同的变量名即代表不同的内存地址,这个是一一对应的,但是在php中不同的变量名可以代表相同的内存地址,这就是php中所谓引用别名的基础,和c的指针很像,却又有差别 3-举个例子,对于变量a变量b,所在内存中都存储变量地址(指针)20011…
Java的变量分为两大类:基本数据类型和引用数据类型. 其中基本类型变量有四类8种:byte short int long float double char boolean,除了8种基本数据类型变量,其他变量都是引用数据类型,如类.接口.数组等. 基本数据类型,只有一块存储空间, 在栈中,存放的是具体数据值. 引用数据类型,有两块存储空间一个在栈(Stack)中,一个在堆(heap)中.堆中存放对象实体(使用new关键字,即表示在堆中开辟一块新的存储空间),栈中存放对象在堆中所在位置的首地址.…
*,& 在指针操作中的意义 (1)* 大家都知道在写int *p 时,*可以声明一个指针.很少人知道*在C/C++中还有一个名字就是"解引用".他的意思就是解释引用,说的通俗一点就是,直接去寻找指针所指的地址里面的内容,此内容可以是任何数据类型,当然也可以是指针(这就是双重指针,后面将会讨论).需要注意的是,在变量声明的时候,*不能当做解引用使用,只是表示你声明的变量是一个指针类型. example1: int a=50; int *p=&a;// '&'的作用…
Java中"指针"的解释以及对"引用"的理解 初学Java面对对象编程,对于一些概念还真的有点难以理解,主要是因为不由自主的联系到以前学过的C语言知识,时不时的影响着自己对Java语言的认识,如今自己对于Java的一些概念解释和理解记录下来,以便于以后回顾: 一.引用: 在Java语言的教材中关于创建对象格式是这样规定的: 类名 引用变量 = new 类名(); 对于这句话的解释是:创建一个对象,将对象的地址赋值给引用变量,此时变量就持有了对象的引用:而此时我们就可…
目录 举例 分析 解决 1.举例 非常量引用 指向 临时对象 —— 即:将 临时对象 传递给 非常量引用类型. 如以下情况就会出现: 实现实数Rational类,实数可以使用+号相加,运算的结果要可以使用 "cout << " 以分数形式输出 实数Rational 的值: Rational a(,); Rational b(,); cout << a+b << endl; 在这里需要重载2个操作符函数:“+”号 和  “<<” 输出符号…
php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. 变量的引用        PHP 的引用允许你用两个变量来指向同一个内容 <?php $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b="EFG"; echo $a;//这里$a的值变…
Java中的引用类型和垃圾回收 强引用Strong References 强引用是最常见的引用: 比如: StringBuffer buffer = new StringBuffer(); 创建了一个StringBuffer类的对象,并用一个变量buffer存储对这个对象的引用.这就是个强引用. 变量持有的是这个对象的引用.通常,引用是一个对象的存储地址. Java不像C或者C++一样,Java没有取地址符号&,也没有解引用符号*或者->. 引用不同于指针,引用不能与整形进行互相转换,也不能…
ARC ARC 苹果版本的自动内存管理的编译时间特性.它代表了自动引用计数(Automatic Reference Counting).也就是对于一个对象来说,只有在引用计数为0的情况下内存才会被释放. Strong(强引用) 让我们从什么是强引用说起.它实质上就是普通的引用(指针等等),但是它的特殊之处在于它能够通过使对象的引用计数+1来保护对象,避免引用对象被ARC机制销毁.本质上来讲,任何对象只要有强引用,它就不会被销毁掉.记住这点对我接下来要讲的引用循环等其他知识来说很重要. 强引用在s…
我们能够创建一个指向函数的指针数组.为了选择一个函数,只需要使用数组的下标,然后间接引用这个指针.这种方式支持表格式驱动码的概念:可以根据状态变量去选择被执行函数,而不用条件语句或case语句.这种设计方式对于经常从表中添加或删除函数(或者想动态的创建或改变表)十分有用. #include <iostream> using namespace std; #define DF(N) void N() { \ cout << "function " #N "…
最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变指向,初始化是必要的.其定义形式如下: type *const 指针名称; 声明指针时,可以在类型前或后使用关键字const,也可在两个位置都使用.例如,下面都是合法的声明,但是含义大不同: const int * pOne;    //指向整形常量 的指针,它指向的值不能修改 int * cons…