[C++]指针与引用(定义辨析)】的更多相关文章

1.定义:     1.1 &-----取地址运算符         功能:返变量的内存地址        Eg:int *p,m;  定义p为指向int类型变量的指针,同时定义变量m             m = 200;   将数值200赋值给变量m             p = &m;    将变量m的地址赋给指针变量p             -------------------------------------             此时:  p = 一个内存地址 *p…
指针变量是包含内存地址的变量.一般的变量直接包含一个特定的值,而指针变量包含的是某一特定数据类型的内存地址.普通变量直接引用其中的值,指针变量则间接引用所指向内存地址中的值.指针变量在使用前需要声明与初始化. 4.5.1 指针变量的定义 指针变量定义时,需要指定所指向的数据类型.声明指针变量的一般形式为: 数据类型  *变量名 “*”运算符通常称为 间接运算符 或 间接引用运算符,在声明中以这种方式使用间接运行符时,它用以表明被声明的变量是指针变量.如下例所示: int *pi; // 声明一个…
static的成员变量,不是存储在Bar实例之中的,因而不会有递归定义的问题. 类声明: class Screen: //Screen类的声明 1 类定义: class Screen{ //Screen类的定义 //etc... }; 1 2 3 当用实例化一个类的对象时,编译器会根据类的定义来分配相应的存储空间.也就是说,在创建对象前,一定要有完整的类定义,这样编译器才能正确的计算所需空间. 那么我们来看如下代码: class Screen{ Screen sc; //error, 'sc'…
4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块.如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL.当内存不再使用时,应使用free()函数将内存块释放. 1.2 void *malloc(int size); 说明:…
1.指针变量允许将一个整数经强制转换后赋值给指针变量    Eg:      float *fp;      fp = (float *)5000;//意义:将5000作为一个地址赋给指针变量fp 2.指针变量指向初始化:         ①int m,*p;       p = &m;    ②int m,*p=&m; 3.交换两指针的指向:   #include<iostream>   using namespace std;   void main(){      int…
C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效的机制,同时引入了另一个与指针相似但不相同的机制: 引用. 一.引用 简单的来说,引用就是变量的别名(alias), 通过别名我们可以操作引用代表的变量. 定义一个引用的语法如下所示: 变量类型   &引用标识符 = 变量名. Exp: ; int &iRef = iVar; iRef = ;…
指针与引用  1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其他的存储单元 (4) 指针可以有多级 (5) 指针使用时需要解引用 (6) sizeof指针得到的是指针本身大小(所指向的变量或对象的地址) (7) 指针的自增是地址的改变而不是指针所指向变量的改变 (8) 程序为指针变量分配内存区域 2. 引用 (1) 引用是原变量的一个别名,跟原来的变量实质是同…
以char类型为例: char a[100];     //a类型为char[100]    &a类型为 char (*)[100]    *a类型为char char *p = a;    //p类型为 char*, *p类型为char. 也可以写成char *p = &a; 类型char[100]和char (*)[100]可隐式到char*转化,指向第一个元素的地址.不包含隐式转换的写法应该:char *p  = &a[0];   而它们的区别: 再看 #include &l…
本来是回答问题的,到这里做个笔记 *&L是指针的引用,实参是个指针.所以L是实参指针的别名,对别名L的修改,等于对实参的修改.*L是传值,你无法改变传过来的实参指针变量的值程序代码: #include<iostream>using namespace std;void foo(int*p);int main(){    int a=5;    int *b=&a;    printf("%d %d\n",b,*b);    foo(b);    printf…
指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.       ★ 相同点:       1. 都是地址的概念:        指针指向一块内存,它的内容是所指内存的地址:        引用是某块内存的别名.       ★ 区别:       1. 指针是一个实体,而引用仅是个别名:     2. 引用使用…
  http://blog.csdn.net/thisispan/article/details/7456169 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名.  ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用"从一而终" ^_^ 4. 引用没有 const,指针有 const,const 的指针不可变:…
原文:http://blog.csdn.net/godspirits/article/details/2953721 BSS段 数据段 代码段 堆栈 (转+) 声明:大部分来自于维基百科,自由的百科全书. BSS段:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段:在采用段式内存管理的架构中,数据段(data segment)通…
二维vectorvector<vector <int> > ivec(m ,vector<int>(n));    //m*n的二维vector 动态创建m*n的二维vector方法一:vector<vector <int> > ivec;ivec.resize(m);for(int i=0;i<m;i++) ivec[i].resize(n); 方法二:vector<vector <int> > ivec;ivec…
前一段时间,我在 cnblogs 别人的博客中,谈到: java 中的引用/指针,与 c++/C# 中的引用/指针不是一个概念. Java 引用,相当于 c++ 指针(fun3).Java 引用可以赋值 null, 而 c++ 引用 (见 fun2) 不能赋值 null,c++ 指针可以赋值 null(fun3). Java 中,无 c++ 引用(fun2)对应的语法. 结果引起不必要的质疑,特此,写博客,对c++/java/c# 几种编程语言的指针.引用,进行比较,期望引起更多的人,对此有所关…
指针和引用的比较? 虽然使用引用和指针都可间接访问另一个值,但它们之间有两个重要区别. 第一个区别在于引用总是指向某个对象:定义引用时没有初始化是错误的. 第二个重要区别则是赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联. 引用一经初始化,就始终指向同一个特定对象(这就是为什么引用必须在定义时初始化的原因). 给指针赋值修改的是指针对象本身,也就是使该指针指向另一对象,指针在不同时刻可指向不同的对象(只要保证类型匹配).…
 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名.  ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用“从一而终” ^_^ 4. 引用没有 const,指针有 const,const 的指针不可变: 5. 引用不能为空,指针可以为空: 6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针…
声明指针: //指针声明 * 号左右的空格是可选的,下面的定义都是正确的 int *pointer1; int* pointer2; int*pointer3; int * pointer4; //注意: pointer5 是指针而 pointer6 不是 int *pointer5, pointer6; //pointer7 和 pointer8 都是指针 int *pointer7, *pointer8; 指针的类型和指针所指向的类型: //指针的类型是int*,表示为int对象的指针 //…
从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程中,被调…
在看了一篇文章以后,http://coolshell.cn/articles/7992.html,说的是C和C++之间的缺陷,当然这篇文章说的非常高深了.所以就找了一些资料,分析了这两者的区别 在<Effective c++>一书中页介绍了关于指针和引用的区别.     值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值.函数的传值有两种,一个是值传递:一个地指针传递. 一.引用简介     引用就是某一变量(目标)的一个别名,对引用的操作与对变量直…
指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址. 而下面2句定义了一…
接着回顾函数.指针和应用. 函数 1.多维数组作为形参时,第一维的大小可以省略(也可以不省略),但是其他维的大小必须指定.比如二维数组形参,int array[3][]不正确,int arry[][10]正确.因为实参传来的是数组的起始地址,在内存中按行存放,但并不区分行和列,如果在形参中不指定列数,则系统无法确定应为多少行多少列. 2.在C++中,可以为参数指定默认值,在函数调用时,没有指定与形参相对应的实参就自动使用默认值.C++函数的默认参数可以是常数,也可以是全局变量或全局常量,甚至可以…
指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: ;int *p=&a; ;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址. 而下面2句定义了一个整形变量a和这个整形a的引…
★同样点: ●都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:而引用则是某块内存的别名. ★不同点: ●指针是一个实体,而引用仅是个别名: ●引用仅仅能在定义时被初始化一次,之后不可变:指针可变:引用"从一而终",指针能够"见异思迁": ●引用没有const,指针有const,const的指针不可变: ●引用不能为空,指针能够为空: ●"sizeof 引用"得到的是所指向的变量(对象)的大小,而"sizeof 指针&quo…
摘要 本文介绍C++指针和概念引用 这是一个指针 指针的类型 指针所指向的类型 指针表达式 指针与函数 什么是引用 指针引用差别 指针和引用的同样点和不同点 **什么是指针** 指针就是一个存放地址的变量, 当指针指向某个变量, 这时这个指针里就存放了那个变量的地址 , 同一时候能够利用指针直接取变量中的值用 ,仅仅要在指针前加 * 就是取其 真值了(也就是被指向的变量的值) ![指针示意](http://img.blog.csdn.net/20150605232124686) **指针的类型*…
[C++自我精讲]基础系列一 指针与引用   一 前言   指针.引用.指针与引用区别. 二 指针   变量:代码中常常通过定义变量来申请并命名存储空间,并通过变量的名字来使用这段存储空间. //变量 int nNum; //声明名字为nNum的int型存储空间 nNum = ; //nNum存储值100 nNum = ; //改变nNum存储值200 指针:又叫一级指针,用来指示一个内存地址的变量.对于一个类型T(int.char.folat...),T*就是指向T的指针类型,一个T*类型的变…
本文主要总结在C++中指针与引用的区别. 从定义与性质来看指针与引用有如下区别: 指针表示的是一块变量的地址 引用表示一个变量的别名. 因此指针变量需要占用空间(一个指针变量在32位系统下占用4字节,64位系统下占用8字节); 理论上来说,引用不需要占用空间.(但引用的底层也是靠指针来实现的,不要问我怎么知道的,看反汇编咯!) 从用法来看如下区别: 1.引用在定义时必须初始化且初始化后不能改变指向;指针可以不用初始化,也可以改变指向. 2.指针的++.--操作改变的是地址,而引用的++.--改变…
C++第四篇--重载_指针_引用 1. 基础知识 重载:函数名相同,根据参数不同(类型.数量.顺序不同)调用同名函数 指针和引用:引用就是别名,引用时必须初始化,引用你定义的变量. int a; int &b=a; //b即为a的别名 2. 重载 main.cpp #include <iostream> using namespace std; int add(int a,int b){ cout<<"add int + int"<<endl…
说道C++的指针,很多人都很头疼,也很confuse.经常把它和变量名,引用(reference)等混淆,其实这最主要的原因是很多程序员对于基本知识的掌握有问题,从而导致的很多基本概念的混淆.本文就是从最基本的概念讲起,着重分析和比较指针和引用.主要从以下几个方面着重的讲解: 1. 变量(variable)的表现形式: 2. 指针的结构和原理: 3. 引用的结构和原理: 4. 指针在Array中的应用和注意事项: 5. 指针不能dereference的几种情况: 一:变量的形式 说道变量,很多人…
1.数组跟指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存.指针远比数组灵活,但也更危险. 数组和指针特点的简单比较: 数组 指针 保存数据 保存地址 直接访问数据 间接访问数据,先取得指针的内容,然后以它为地址取得数据 用于存储数目固定且类型相同的数据 通常用于动态数据结构 编译器自动分配和删除…
1.指针 typedef说明一种新类型名,来代替已有类型名. a.案例:typedef char* String_t和#define String_d char *这两句在使用上的区别? 1)前者声明一个类型的别名,在编译时处理,有类型检查.后者是一个简单的替换,在预编译时处理,无类型检查. 2)String_t a,b;中a和b都是char*类型的.但是String_d a,b;中a是char*类型的,b是char类型的. b.对 typedef string *pstring; const…