易截截图软件、单文件、免安装、纯绿色、仅160KB

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

 一、基本知识
指针和引用的声明方式:
声明指针:char* pc;
声明引用:char& rc = 0;
 
它们的区别:
①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。
②从内存分配上看,程序为指针变量分配内存区域,而不为引用分配内存区域,因为引用声明时必须初始化,从而指向一个已经存在的对象。引用不能指向空值。
③从编译上看,程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说引用可以被认为是不能改变的指针。
④不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。
⑤理论上,对于指针的级数没有限制,但是引用只能是一级。如下:
  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, %c\n", pc, rc);
 
  char *pc2;
  // 声明一个指针,但可以不初始化
  pc2 = pc;
 
  // char& rc2;
  // 上面语句编译时,会产生如下错误:
  // error C2530: 'rc2' : references must be initialized
  // 即,应用必须初始


相关文档:

C多维数组

 一、多维数组地址的表示方法
  设有整型二维数组a[3][4]如下:
  0 1 2 3
  4 5 6 7
  8 9 10 11
  设数组a的首地址为1000,各下标变量的首地址及其值如图所示。  
在前面曾经介绍过, C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a[0],a[1], ......

C#发送邮件代码 (B/S、C/S皆可用)

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using  ......

C/C++基本知识(四)

 
C/C++基本知识(转载)
0
推荐本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。
  许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试 ......

【题目4】如何自己实现C函数strstr()

解题思路: 这个网络上已经有很多答案,这里
列举一个复杂度为0(m*n)的例子。实现的原理
很简单,顺序遍历要查找的字符串,如果没有找
到,字符串指针往前一位,再往后比较要查找的
字符串(模式串),如下图所示:
a b c d  d  d a d a c a b d a d d d a d c k
     &nbs ......

ANSI C —— 格式化输出

【原型】
printf("<格式化字符串>
", <参量表>
);
 
int printf
(const char *format, ...);
int fprintf
(FILE *stream, const char *format, ...);
int sprintf
(char *str, const char *format, ...);
int snprintf
(char *str, size_t size, const char *format, ...);
vp ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号