2020-10-20

it2023-11-04  70


define 后无需括号 如 #include <stdio.h>

#define LENGTH 10 #define WIDTH 5 #define NEWLINE ‘\n’

int main() {

int area;

area = LENGTH * WIDTH; printf(“value of area : %d”, area); printf("%c", NEWLINE);

return 0; }


const与define的区别:您可以使用 const 前缀声明指定类型的常量 如

#include <stdio.h>

int main() { const int LENGTH = 10; const int WIDTH = 5; const char NEWLINE = ‘\n’; int area;

area = LENGTH * WIDTH; printf(“value of area : %d”, area); printf("%c", NEWLINE);

return 0; }

#define 是宏定义,它不能定义常量,但宏定义可以实现在字面意义上和其它定义常量相同的功能,本质的区别就在于 #define 不为宏名分配内存,而 const 也不为常量分配内存,怎么回事呢,其实 const 并不是去定义一个常量,而是去改变一个变量的存储类,把该变量所占的内存变为只读!

const 定义的是变量不是常量,只是这个变量的值不允许改变是常变量!带有类型。编译运行的时候起作用存在类型检查。

define 定义的是不带类型的常数,只进行简单的字符替换。在预编译的时候起作用,不存在类型检查。

1、两者的区别 (1) 编译器处理方式不同

#define 宏是在预处理阶段展开。 const 常量是编译运行阶段使用。 (2) 类型和安全检查不同

#define 宏没有类型,不做任何类型检查,仅仅是展开。 const 常量有具体的类型,在编译阶段会执行类型检查。 (3) 存储方式不同 #define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。(宏定义不分配内存,变量定义分配内存。)const常量会在内存中分配(可以是堆中也可以是栈中)。 (4) const 可以节省空间,避免不必要的内存分配。 例如: #define NUM 3.14159 //常量宏 const doulbe Num = 3.14159; //此时并未将Pi放入ROM中 … double i = Num; //此时为Pi分配内存,以后不再分配! double I= NUM; //编译期间进行宏替换,分配内存 double j = Num; //没有内存分配 double J = NUM; //再进行宏替换,又一次分配内存! const 定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象 #define 一样给出的是立即数,所以,const 定义的常量在程序运行过程中只有一份拷贝(因为是全局的只读变量,存在静态区),而 #define 定义的常量在内存中有若干个拷贝。 (5) 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。 (6) 宏替换只作替换,不做计算,不做表达式求解; 宏预编译时就替换了,程序运行时,并不分配内存。


a++和++a的差别 #include <stdio.h>

int main() { int c; int a = 10; c = a++; printf(“先赋值后运算:\n”); printf(“Line 1 - c 的值是 %d\n”, c ); printf(“Line 2 - a 的值是 %d\n”, a ); a = 10; c = a–; printf(“Line 3 - c 的值是 %d\n”, c ); printf(“Line 4 - a 的值是 %d\n”, a );

printf(“先运算后赋值:\n”); a = 10; c = ++a; printf(“Line 5 - c 的值是 %d\n”, c ); printf(“Line 6 - a 的值是 %d\n”, a ); a = 10; c = --a; printf(“Line 7 - c 的值是 %d\n”, c ); printf(“Line 8 - a 的值是 %d\n”, a );

}以上程序执行输出结果为:先赋值后运算: Line 1 - c 的值是 10 Line 2 - a 的值是 11 Line 3 - c 的值是 10 Line 4 - a 的值是 9 先运算后赋值: Line 5 - c 的值是 11 Line 6 - a 的值是 11 Line 7 - c 的值是 9 Line 8 - a 的值是 9

2020年10月20日

最新回复(0)