首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C中的宏常量和常量变量有什么区别?

在C语言中,宏常量和常量变量是两种不同的概念。

  1. 宏常量(Macro Constants): 宏常量是通过预处理指令#define定义的符号常量。它们在编译之前被替换为其对应的值。宏常量没有类型,仅仅是简单的文本替换。它们的定义通常位于头文件中,以便在整个程序中使用。

区别:

  • 宏常量没有类型,仅仅是文本替换,不会分配内存空间。
  • 宏常量在编译之前被替换为其对应的值,因此在编译时期就已经确定了。

示例:

代码语言:c
复制
#define PI 3.14159
#define MAX(a, b) ((a) > (b) ? (a) : (b))

float radius = 5.0;
float area = PI * radius * radius;
int maxNum = MAX(10, 20);

推荐的腾讯云相关产品和产品介绍链接地址:

  1. 常量变量(Constant Variables): 常量变量是在程序运行时不能被修改的变量。它们在定义时被赋予一个固定的值,并且在整个程序的执行过程中保持不变。常量变量可以有不同的类型,如整数、浮点数、字符等。

区别:

  • 常量变量有类型,并且在内存中分配了空间。
  • 常量变量的值在程序运行时是不可修改的。

示例:

代码语言:c
复制
const int MAX_NUM = 100;
const float PI = 3.14159;

int age = 25;
const int *ptr = &age;  // 指向常量的指针,指针所指向的值不可修改

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

容易混淆的const

(1)可以定义const常量,具有不可变性。   例如:const int Max=100; Max++会产生错误; (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。   例如: void f(const int i) { …} 编译器就会知道i是一个常量,不允许修改; (3)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错;   例如: void f(const int i) { i=10;//error! } (4) 可以节省空间,避免不必要的内存分配。 例如:   #define PI 3.14159 //常量宏   const double Pi=3.14159; //此时并未将Pi放入ROM中 …   double i=Pi; //此时为Pi分配内存,以后不再分配!   double I=Pi; //编译期间进行宏替换,分配内存   double j=Pi; //没有内存分配   double J=PI; //再进行宏替换,又一次分配内存!   const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干份拷贝。 (5) 提高了效率。   编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

01
领券