C中有关引用和指针的异同】的更多相关文章

参考于https://blog.csdn.net/wtzdedaima/article/details/78377201 C语言也学了蛮久的,其实一直都没有用到过或者碰到过引用的例子.前端时间再全面复习C的基础知识,看到引用这一块,发现两者的还是有一些差别的,抱着我不用,万一别人用我也需要看懂的原则,仔细观察研究了两者的区别. 一下内容为转载: 引用:引用是一个变量的另一个名字,又称别名.定义方式: int a=10: int &b=a:在这里,意思就是给a变量起了一个新名字b,因此b不可再次被…
http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用"从一而终" ^_^ 4. 引用没有 const,指针有 const…
(1) 引用总是指向一个对象,没有所谓的 null reference .所有当有可能指向一个对象也由可能不指向对象则必须使用 指针. 由于C++ 要求 reference 总是指向一个对象所以 reference要求有初值. String & rs = string1; 由于没有所谓的 null reference 所以所以在使用前不需要进行测试其是否有值.,而使用指针则需要测试其的有效性. (2)指针可以被重新赋值而reference则总是指向最初或地的对象. (3)必须使用referenc…
欲分析指针和引用,则要分析变量名和地址之间的关系(不管你理解还是不理解,无论你是从老师那里听到的,还是网上看到的,应该都知道两句话:1. 指针就是地址,2.引用就是给变量起个别名) 所以我们就要来分析分析变量名和地址之间的关系.这就要从编译原理中的符号表说起,我们上编译原理的时候老师就没有将那一章,所以对于符号表,我的认识比较浅显,不过应该已经能够解释地址和变量名之间的关系啦. 编译器中通常要维护一个符号表,而且这个符号表是要贯串整个编译过程的.网上盗了张图 如果没有学过编译原理,看不懂这张图也…
想必大家对C++中的指针都有所了解,但是什么是引用呢?C++11标准引入了“引用”的新功能. 引用 引用(reference):给对象起了另外一个名字,引用类型引用(refers to)另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名: ; int &d = val; 可以认为变量名就是一个可以操控内存的标签,那么引用就可以理解为另一个标签.新定义的标签和原来的标签都可以访问存放在内存中的数据.例如: #include <iostream> #inc…
//一直以为java中没有指针,其实java的引用就是指针,只不过堆栈中的引用储存了在堆中的地址,可以看做java中的指针.public class sibgleLink<E> { // 结点内部类 private class Node { private Object data; private Node next = null; public Node() { data = null; } // 带数据的构造函数 public Node(E data) { this.data = data…
引用和指针有何区别?何时只能使用指针而不能使用引用?    引用是一个别名,不能为 NULL 值,不能被重新分配:指针是一个存放地址的变量.当需要对变量重新赋以另外的地址或赋值为 NULL 时只能使用指针. 引用和指针的区别:相同点:都是地址的概念,指针指向一块内存,内容就是指向内存的地址,而引用就是一块内存的地址.不同点:1.引用仅是一个别名(不需要分配内存),而指针是一个实体(需要分配内存).2.引用定义时必须初始化,且以后不可以改变,而指针不需要.3.引用不可以为空(NULL),而指针可以…
C++中引用与指针的区别(详细介绍) C++中的引用与指针的区别   指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.       ★ 相同点:       1. 都是地址的概念:        指针指向一块内存,它的内容是所指内存的地址:        引用是某块内存的别名.       ★ 区别:    …
#include <iostream> using namespace std; struct Teacher{ char name[64]; int age; }; //在被调用函数 获取资源int getTeacher(Teacher **p){ if (p == NULL) { return - 1; } Teacher *tmp = NULL; tmp = (Teacher*)malloc(sizeof(Teacher)); if (tmp == NULL) { return -2;…
1.引用只是变量的一个别名,并不占用内存空间,而指针是一个变量,里面保存着被指向的变量在内存中的地址: 2 引用只能在定义时被初始化一次,之后不可变,而指针可变: 3 引用没有 const,指针有 const: 4 引用使用时无需解引用(*),指针需要解引用: 5 “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小: 5. 引用不能为空,指针可以为空: 6 指针和引用的自增(++)运算意义不一样. 7 注意,引用传…
Java中引用的作用类似于指针,但是有区别:()    (1) 指针必然指向一个内存地址,如果你定义的时候不指定,就会乱指(很可能造成安全隐患)但是引用定义出来后默认指向为空.     (2) 指针可以随意操作,但是引用不可以随便操作,永远只能指向对象的首地址,或者改变引用所指向的对象.     (3) 引用降低了指针的灵活性,但是更安全,便于人操作.     (4)引用是受控.安全.阉割版的指针.安全了,当然也就失去了一定的功能,不过还是利大于弊.    (5)Java 中没有指针,但是有一个…
  您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面.   首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hado…
1:引用的和指针在概念上的区别 引用是变量的别名,例如 int m; int &n=m; 引用作为一个别名.它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量).则任何对引用的操作即对变量的操作.引用一般是用于处理函数的参数与返回值. 使用规则: a:引用在创建的时候必须被初始化(指针可以在任何时候赋值) b:引用必须与一个确定的合法内存单元相关联.不存在NULL引用. c:一旦引用初始化后,就…
第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用  子程序模板七.数组与子程序八.文件句柄的引用 一.引用简介    引用就是指针,可以指向变量.数组.哈希表(也叫关联数组)甚至子程序.Pascal或C程序员应该对引用(即指针)的概念很熟悉,引用就是某值的地址,对其的使用则取决于程序员和语言的规定.在Perl中,可以把引用称为指针,二者是通用的,无差别的.引用在创建复杂数据方面十分有用…
C++中值传递.指针传递.引用传递的总结   指针传递和引用传递一般适用于:函数内部修改参数并且希望改动影响调用者.对比值传递,指针/引用传递可以将改变由形参"传给"实参(实际上就是直接在实参的内存上修改,不像值传递将实参的值拷贝到另外的内存地址中才修改).指针/引用传递的另外一种用法是:当一个函数实际需要返回多个值,而只能显式返回一个值时,可以将另外需要返回的变量以指针/引用传递给函数,这样在函数内部修改并且返回后,调用者可以拿到被修改过后的变量,也相当于一个隐式的返回值传递吧. 1…
下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const.volatile等等.见下图,所示指针的含义: 引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用.见下图,所示引用的含义: 2.指针和引用的区别 首先,引用不可以为空,但指针可以为空.前面也说过了引用是对象的别名,引用为空——对象都不存在,怎么可能有别名!故定义一个引用的时候,必须初始化.因此…
https://blog.csdn.net/yangfanzn/article/details/44731391 1-php和c中的变量名都会被解析成内存地址,变量名所代表的内存的地址中内容即代表变量的内容,但由于指针的跳转,这个内容往往并不那么明显 2-在c中不同的变量名即代表不同的内存地址,这个是一一对应的,但是在php中不同的变量名可以代表相同的内存地址,这就是php中所谓引用别名的基础,和c的指针很像,却又有差别 3-举个例子,对于变量a变量b,所在内存中都存储变量地址(指针)20011…
1.变量我们可能产生这样一个疑问:编程语言中的变量到底是什么意思呢?事实上,当我们定义了一个变量a时,就是在存储器中指定了一组存储单元,并将这组存储单元命名为a.变量a的值实际上描述的是这组存储单元中存放的具体信息.例如,在JS中 var a; a=; 第一个语句在存储器中指定了一组存储单元,并命名为a:第二个语句在这组存储单元中存储了数字10.变量a的值为10实际上是说存储单元组a存储的信息是10.假使我们再次对a进行复制操作: a="hello"; 这样a的值变成字符串”hello…
1,关于 const 的疑问: 1,const 什么时候为只读变量,什么时候是常量: 1,const 从 C 到 C++ 进化的过程中得到了升级,const 在 C++ 中不仅仅像在 C 中声明一个只读变量,其在 C++ 中完全可以得到一个常量: 2,const 常量的判别准则: 1,只有用字面量初始化的 const 常量才会进入符号表: 1,这里是字面量初始化 const 常量,不是 const 常引用: 2,得到了真正意义上的常量: 2,使用其他变量初始化的 const 常量仍然是只读变量:…
1.变量 我们可能产生这样一个疑问:编程语言中的变量到底是什么意思呢? 事实上,当我们定义了一个变量a时,就是在存储器中指定了一组存储单元,并将这组存储单元命名为a.变量a的值实际上描述的是这组存储单元中存放的具体信息. 例如,在JS中 var a; a=10; 第一个语句在存储器中指定了一组存储单元,并命名为a: 第二个语句在这组存储单元中存储了数字10. 变量a的值为10实际上是说存储单元组a存储的信息是10. 假使我们再次对a进行复制操作: a="hello"; 这样a的值变成字…
一,C++中引用的基础知识 1.引用的基本概念 1.所谓的引用其实就是对变量起“别名”.引用和变量对应得是相同的内存,修改引用的值,变量的值也会改变,和指针类似. 2.引用在定义的时候必须要初始化,初始化后就用引用的对象绑定在一起了. 3.引用本身不是对象,不能定义引用的引用. 2.引用的意义 1.引用作为其他变量的别名存在,因此在一些场合可以用来替代指针. 2.引用相对于指针来说具有更好的可读性和实用性. 3.引用的定义方式 数据类型 &引用名称 = 变量; # include<iostr…
php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址. 变量的引用 PHP 的引用允许你用两个变量来指向同一个内容 <?php $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b="EFG"; e…
nim语言的引用和其他语言的指针有点相似 可以提供一种“多对一”的关系 这就意味着不同的引用可以指向同一个内存位置 nim区分可被追踪的引用和不可被追踪的引用 不可被追踪的引用又称为指针 可被追踪的引用可以被垃圾回收器回收 不可被追踪的引用指向手动分配的对象,或其他地方创建出来的一块内存区域 这也就是说,不可被追踪的引用是不安全的 对于某些底层操作,不可被追踪的引用有其存在的必要 可被追踪的引用使用ref关键字定义, 不可被追踪的引用使用ptr关键字定义 空下标的方括号[]可以用来解引用 add…
引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确.灵活地使用引用,可以使程序简洁.高效.我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源.故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用. 一.引用简介 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符 &引用名=目标变量名: [例1]:int a; int &ra=a; //定义引…
数组名同时也是该数组首元素的地址,而指针提供了一种用来使用地址的符号方法,因此指针能够很有效地处理数组. 将一个整数加给指针,这个整数会和指针所指类型的字节数相乘,然后所得的结果会加到初始地址上 date + == &date[]; // 相同的地址 *(date + ) == date[]; // 相同的值 在函数原型或函数定义头的场合中(并且也只有在这两种场合中),可以用int ar[]代替int* ar,处理数组的函数实际上是使用指针做为参数的 int sum(int* ar, int n…
using namespace std; class Point { public: double x; double y; Point(){} void setPoint(double x,double y ) { this->x = x; this->y = y; } Point(double xx,double yy) { this->x=xx; this->y=yy; } }; class Point1 { public: Point point; void set() {…
$a = array('a','b','c'); foreach($a as &$v){} foreach($a as $v){ } var_dump($a); 现在.不要打开浏览器,猜测一下.输出的结果是什么? 对引用比较了解的童鞋可能已经看出来了.正确答案是: array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> &string(1) "b"}  也…
引用是个别名. 1.引用是否占用空间 引用是否占用空间,此处是指广义上的占用内存空间,即为该对象新开辟一块内存.这个需要分不同的情况. 首先看一下常引用(const 引用). 这里关于常引用在c++ primer中有如下描述: 1.const引用是指向const的引用. 2.非const引用只能绑定到与该引用同类型的对象:const引用则可以绑定到不同但是相关的类型的对象或绑定到右值. 重点看第二条的第二句话. 看如下例子: ; ; ; 以上都是合法的代码. 根据c++primer上面对不同类型…
在<从汇编看c++的引用和指针>一文中,虽然谈到了引用,但是只是为了将两者进行比较.这里将对引用做进一步的分析. 1 引用的实现方式 在介绍有关引用的c++书中,很多都说引用只是其引用变量的一个别名.我自己不是很喜欢这种解释,因为觉得这种解释会给人误解,好像引用和变量就是一回事,而且,书中也没有给出,为什么引用就是一个别名的原因,大都只是给出一个例子,证明引用可以改变传递给函数的实际参数的值,从而说明,用引用传参,和传值不是一回事.这里,我将介绍一下自己分析的引用实现方式.下面先来看c++源码…
1.c++中的bool类型:     其实c语言中也有bool类型,如果是遵守c90标准的编译器(其实现在大量编译器都是c90标准的),对于bool类型的使用除了要使用头文件 stdbool.h外,与c++中的bool类型完全相同.如果不是c90标准,则此时的bool其实就是int类型.详细见下stdbool.h文件的源码: [cpp]   #ifndef _STDBOOL_H_   #define _STDBOOL_H_ #define __bool_true_false_are_define…