当前位置:  编程技术>c/c++/嵌入式

C/C++中指针和引用之相关问题深入研究

    来源: 互联网  发布时间:2014-10-21

    本文导语:  一、基本知识指针和引用的声明方式:声明指针: char* pc;声明引用: char c = 'A'   char& rc = c; 它们的区别:①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:...

一、基本知识
指针和引用的声明方式:
声明指针: char* pc;
声明引用: char c = 'A'
   char& rc = c;

它们的区别:
①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。

②从内存分配上看,程序为指针变量分配内存区域,而不为引用分配内存区域,因为引用声明时必须初始化,从而指向一个已经存在的对象。引用不能指向空值。

③从编译上看,程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说引用可以被认为是不能改变的指针。

④不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。

⑤理论上,对于指针的级数没有限制,但是引用只能是一级。

如下:

代码如下:

  int** p1; // 合法。指向指针的指针
  int*& p2; // 合法。指向指针的引用
  int&* p3; // 非法。指向引用的指针是非法的
  int&& p4; // 非法。指向引用的引用是非法的

注意上述读法是从左到右。

程序1:
代码如下:

#include "stdio.h"
int main(void)
{
  // 声明一个char型指针pc,且让它指向空值
  char* pc = 0;
  char a = 'a';
  // 声明一个引用rc,且让它引用变量a
  char& rc = a;
  printf("%d, %cn", pc, rc);

  char *pc2;
  // 声明一个指针,但可以不初始化
  pc2 = pc;

  // char& rc2;
  // 上面语句编译时,会产生如下错误:
  // error C2530: 'rc2' : references must be initialized
  // 即,应用必须初始化
  // rc = *pc;
  // 上面语句编译不会有问题,但运行时,会报如下错误:
  // "0x00401057"指令引用的"0x00000000"内存。该内存不能为"read"
  // 说明引用在任何情况下,都不能指向空值

  return 0;
}

程序2:
代码如下:

#include
#include
using namespace std;
int main(void)
{
  string s1("Hello");
  string s2("World");
  // printf("%sn", s1); 不能用printf输出s1,而应该用cout

  cout

    
 
 

您可能感兴趣的文章:

  • 深入解析函数指针与返回函数的指针
  • 深入理解数组指针与指针数组的区别
  • 深入解析C++中的指针数组与指向指针的指针
  • 数组和指针的区别深入剖析
  • 数组指针、指针数组以及二位数组的深入解析
  • 基于C语言中野指针的深入解析
  • 一般函数指针和类的成员函数指针深入解析
  • 深入const int *p与int * const p的区别详解(常量指针与指向常量的指针)
  • 深入理解双指针的两种用法
  • 深入理解void以及void指针的含义
  • 二维指针动态分配内存连续问题深入分析
  • 深入理解C语言 static、extern与指针函数
  • 深入分析C语言中结构体指针的定义与引用详解
  • C语言指针的长度和类型深入分析
  • C++ 智能指针深入解析
  • 关于在内核空间和用户空间引用一个空指针的后果很原因
  • 引用与指针的效率问题
  • JAVA中函数调用时,能不能向 C/C++一样函数的入口参数可以为传出值(就是引用,或指针)
  • 基于指针pointers和引用references的区别分析
  • C++中指针和引用的区别分析
  • c++将引用或者是指针作为函数参数实现实参的运算
  • java函数传参数有“传值”与“传引用(指针)”之分吗?
  • c++ 指针与引用的区别介绍及使用说明
  • 智能指针与弱引用详解
  • java及C++中传值传递、引用传递和指针方式的理解
  • c++中引用和指针的区别和联系
  • 从汇编看c++中引用与指针的使用分析
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • gcc编译CORBA程序如何关闭智能指针转换为普通指针的警告
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 指向类成员函数的指针其实并非指针
  • 谁说java没指针,我觉得全是指针才对
  • 一个用指针传递内存的问题(如果传进去的是三重指针确不行)
  • busybox中的gzip运行过程中出现page fault错误,并指出出错的指针,但是怎么使用gdb调试,找到指针对应的语句?
  • 关于free指针的指针分量
  • C语言中常量指针与指针常量区别浅析
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • C++中指向对象的常指针与指向常对象的指针详解
  • 关于指针变量,struct 变量,指针使用的一些疑惑,望高手指教
  • 指向变量的常指针与指向常变量的指针详细解析
  • 结构指针类型强制转换
  • 请问return语句会执行哪些操作?在函数中return一个已分配内存的指针,该指针所占用的内存会释放吗?
  • 请问如何在linux (redhat)下传递一维数组指针?
  • C:函数指针
  • 利用函数指针的好处是什么?
  • 野指针问题
  • 关于指针的地址重的问题,求教了。
  • 大家讨论一下指针数组的问题!




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3