随记1(#define a 10和const int a=10)】的更多相关文章

正是求职笔试旺季,前几天听说有人遇到此题:#define a 10 和const int a=10的区别,废话不多说,下面来解释一下: #define 指令是定义符号常量 const   定义的是常变量(变量的值不能改变) 符号常量只是用一个符号常量代替一个字符串,在预编译的时候进行替换回来.没有类型,在内存中不存在以符号长量命名的内存单元: 而变量是具有类型的,在内存中也存在着以它命名的内存单元,并且可以用sizeof测出他的长度 上面的区别也就是说第一个a是没有类型的,是一个符号常量 而第二…
// #define a int[10] #include <stdio.h> #include <stdlib.h> #define a int[10] int main() { int *p=(int *)malloc(sizeof(a)); p[0]=1; printf("%d\n",p[0]); return 0; } // typedef int a[10]; #include <stdio.h> typedef int a[10]; in…
1.const vector <int> vec(10) —— 与const int a[10]是一回事,意思是vec只有10个元素,不能增加了,里面的元素也是不能变化的 vector<int> a(10); const vector<int> b(10); a[1]=10;//正确 b[1]=10;//错误 a.resize(20);//正确 b.resize(20);//错误 2.关于vector<const int> ,在GCC下是没有这种用法的,编译…
ANSIC允许声明常量,常量和变量不同,常量就是不可以改变的量,用关键字const来修饰 比如:const int a int const a 以上两种声明方式是一样的,我们不需要考虑const和int的先后顺序,按照你理解的方便的一中方式进行应用. 因为const和int的顺序先后并不影响结果,因此 int const *   &&  const int *这两中情况就是一样的 所以我们只需要讨论两种情况 -----------------------------------------…
typedef int a[10]; a b[10]; 为什么分配400个字节的空间? int a[10];为什么分配了40个字节的空间? 问题:应该怎么解释typedef的这种行为呢?而如果换成是#define a int[10];以上定义则报错? typedef int a[10]; 说明a就等同于int[10]类型..所以 a b[10];//等同与int b[10][10]; 而int a[10];这里的a代表的不是类型..而是数组名.. 而#define只是字符替换而已.. a b[1…
1.define是宏定义,程序在预处理阶段将用define定义的内容进行了替换.因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存.const定义的常量,在程序运行时在常量表中,系统为它分配内存.2.define定义的常量,预处理时只是直接进行了替换.所以编译时不能进行数据类型检验.const定义的常量,在编译时进行严格的类型检验,可以避免出错.3.define定义表达式时要注意“边缘效应”,例如如下定义:    #define N 2+3 //我们预想的N值是5,我们这…
const和volatile放在一起的意义在于: (1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心: (2)另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化. "const"含义是"请做为常量使用",而并非"放心吧,那肯定是个常量". "volatile"的含义是"请不要做没谱的优化,这个值可能变掉的",而并非"你可以修改这个值&quo…
C++ 语言可以用const 来定义常量,也可以用#define 来定义常量.但是前者比后者有更多的优点:(1) const 常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查.而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应).(2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试.规则5-2-1:在C++ 程序中只使用const 常量而不使用宏常量,即const 常量完全取代宏常量. 2.实现机制 宏…
const   const 是c++中的修饰符.  c++中常用来定义常量,修饰左值. #define 宏定义语句, 在预处理阶段直接做文本替换,不做类型检查. 它们之间的最大区别: 1.  对于const 变量,系统只给了一个相应的内存地址,而#define则是给出了一个立即数.因为const变量是存放在内存的静态区域中,所以在程序运行过程中const变量只有一个拷贝,而#define 所定义的宏变量却有多个拷贝,所以宏在程序运行过程中所消耗的内存要比const变量的大得多.#define所定…
首先注意,const int * p 和int const *p 是一样的,并且不管是不是*p,即使const int i和int const i也是一样的,所以我们接下来只讨论int const * p和int * const p的不同 对于这种问题,我们只用将const 的位置固定,然后再看后面的东西,一般规则是后面的东西不能在进行赋值或者修改.例如下面: #include<stdio.h> int main(int argc,char *argv[]) { int i = 10; int…