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

C和C++中的CONST  

C中的CONST  
C中CONST的使用:
  const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。
  虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。
  问题:const变量 & 常量
(根据C/C++深层探索这本书里面的变长数组章节所说这样在C99标准中是可以的了。甚至可以是int f();int C[f()];这样是为了方便使用多维数组。有待我在VC,GCC中验证了再说!)
  为什么下面的例子在使用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢? 
  const int n = 5;
  int a[n];
  答案与分析:
  1)、这个问题讨论的是“常量”与“只读变量”的区别。常量肯定是只读的,例如5, “abc”,等,肯定是只读的,因为因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时维度必须是“常量”,“只读变量”也是不可以的。
  2)、注意:在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而const int n,n只是一个变量(常量 != 不可变的变量,但在标准C++中,这样定义的是一个常量,这种写法是对的),实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是 ANSI C对数组的规定限制了它。
  3)、那么,在ANSI C 语言中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。
   (const   int   A=100;   它与   #define   A   100   的区别在于,后者是在编译前就替换掉了,而前者是在编译时进行替换的。  )
  问题:const变量 & const 限定的内容
  下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢? 
  typedef char * pStr;
  char string[4] = "abc";
  const char *p1 = string;
  const pStr p2 = string;
  p1+


相关文档:

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

 一、基本知识
指针和引用的声明方式:
声明指针:char* pc;
声明引用:char& rc = 0;
 
它们的区别:
①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对 ......

Exper C Programming 零零散散

1.
关于char* 和const char*以及char**和const char**分别作为实参和形参的问题
传值实际上是类似于赋值的。
两个操作数都是指向限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。 ......

C/C++面试题

1.介绍一下STL,详细说明STL如何实现vector.
    Answer:
    STL (标准模版库,Standard Template Library.它由容器算法迭代器组成。
    STL有以下的一些优点:可以方便容易地实现搜索数据或对数据排序等一系列的算法;调试程序时更加安全 和方便;即使是人们用STL在 ......

Pipe is a worm hole connecting C and C++

In C programming language, the observer design pattern is implemented with function pointer (aka callback function). But in Qt library, it introduces signal and slot. How to link a callback function from the C callback function to the C++ siganl and slot is a problem I encounter. Call back function ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号