发布网友 发布时间:2022-04-06 05:03
共5个回答
热心网友 时间:2022-04-06 06:32
如果就单单定义常量说的话:
1. const 定义的常数是变量 也带类型
2. #define 定义的只是个常数 不带类型。
如果要更多的比较,就很多了追问能讲的具体点吗?会打赏的哦
追答const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态区),而#define定义的宏常量在内存中有若干个拷贝。
#define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。
#define宏没有类型,而const修饰的只读变量具有特定的类型
===========================================
const int *p; //p可变,p指向的对象不可变
int const*p; //p可变,p指向的对象不可变
int *const p; //p不可变,p指向的对象可变
const int *const p; //指针p和p指向的对象都不可变
====================================
总的来说:
const:有数据类型,编译进行安全检查,可调试
define:宏,不考虑数据类型,没有安检,不能调试
================================
这里有一个记忆和理解的方法:
先忽略类型名(编译器解析的时候也是忽略类型名),我们看const离哪个近。"近水楼台先得月",离谁近就修饰谁。
判断时忽略括号中的类型
const (int) *p; //const修饰*p,*p是指针指向的对象,不可变
(int) const *p; //const修饰*p,*p是指针指向的对象,不可变
(int)*const p; //const修饰p,p不可变,p指向的对象可变
const (int) *const p; //前一个const修饰*p,后一个const修饰p,指针p和p指向的对象都不可变
热心网友 时间:2022-04-06 07:50
#define 是通过文本替换来实现
第一个程序:
#define T1 a+a
#define T2 T1-T1
实际上 T2 是 a+a-a+a。
第二个程序:
const int T1=a+a;
const int T2=T1-T1;
T2 是 (a+a) - (a+a)。
而在这两个例子并不能体现它们之间的差异。
你试着把T2换成乘法,如:
#define T2 T1*T1
和
const int T2 = T1 * T1;
热心网友 时间:2022-04-06 09:25
const 是常数定义,而define是宏定义(详细宏定义可以在百度找到),是完全不一样的东西:
譬如说:
const int abc=123; //定义一个常数123
printf("abc = %d\n",abc); //程序编译后是用常数abc打印
而
#define abc 123
printf("abc = %d\n",abc); //程序编译后其实次代码会变成如下:
printf("abc = %d\n",123);
在说个例子, 宏定义有点意味着string replace, 譬如说
#define abc(data) printf(data)
abc("print string") 编译后就会变成
printf("print string");
热心网友 时间:2022-04-06 11:16
作为程序员的我们,经常在C++中用到const和define,但是两者具体有什么区别呢?你知道吗?
首先在定义上:用#define MAX 255定义的常量是没有类型的,所给出的是一个立即数,编译器只是把所定义的常量值与所定义的常量的名字联系起来,define所定义的宏变量在预处理的时候进行替换,在程序中使用到该常量的地方都要进行拷贝替换;
用const float MAX = 255; 定义的常量有类型名字,存放在内存的静态区域中,在程序运行过程中const变量只有一个拷贝,而#define 所定义的宏变量却有多个拷贝,所以宏定义在程序运行过程中所消耗的内存要比const变量的大得多;
用define定义的常量是不可以用指针变量去指向的,用const定义的常量是可以用指针去指向该常量的地址的;
用define可以定义一些简单的函数,const是不可以定义函数的。具体来说,有以下几方面的区别:
1. 编译器处理方式
define – 在预处理阶段进行替换;const – 在编译时确定其值
2.类型检查
define – 无类型,不进行类型安全检查,可能会产生意想不到的错误;const – 有数据类型,编译时会进行类型检查
3.内存空间
define – 不分配内存,给出的是立即数,有多少次使用就进行多少次替换,在内存中会有多个拷贝,消耗内存大;const – 在静态存储区中分配空间,在程序运行过程中内存中只有一个拷贝
4.其他
在编译时, 编译器通常不为const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。宏替换只作替换,不做计算,不做表达式求解。宏定义的作用范围仅限于当前文件。默认状态下,const对象只在文件内有效,当多个文件中出现了同名的const变量时,等同于在不同文件中分别定义了的变量。如果想在多个文件之间共享const对象,必须在变量定义之前添加extern关键字(在声明和定义时都要加)。在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
热心网友 时间:2022-04-06 13:24
如果就单单定义常量说的话:
1. const 定义的常数是变量 也带类型
2. #define 定义的只是个常数 不带类型。