易截截图软件、单文件、免安装、纯绿色、仅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/C++移位运算符出界后的结果是不可预期的

转自:http://dev.csdn.net/article/29/29329.shtm
 
关于逻辑移位、算术移位可参见 迅雷深大笔试题部分。的一道题。
以前看到C++标准上说,移位运算符(<<、>>)出界时的行为并不确定:
The behavior is undefined if the right operand is negative, or greater than or equal to the length in bit ......

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 ......

C和指针学习笔记(1)

       1、 经常看见return EXIT_SUCCESS或return EXIT_FAILURE,但都不知这两个来自何处,现在才知原来stdlib.h定义了EXIT_SUCCESS和EXIT_FAILURE符号。
在stdlib.h头文件里:
#define EXIT_SUCCESS    0
#define EXIT_FAILURE    1
    & ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号