【C语言_20】const与#define的用法及区别

1.const关键词的用法

const 在实际编程中用得并不多,const 是 constant 的缩写,意思是“恒定不变的”!它是定义只读(不能修改)变量的关键字,或者说 const 是定义常变量的关键字。用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值

const int n=10;

const 和变量类型 int 可以互换位置,二者是等价的:

int const n=10;

2.const和指针

const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据。const 和指针一起使用会有几种不同的顺序,如下所示:

const int *p1;
int const *p2;
int * const p3;

在前面两种情况下,指针所指向的数据是只读的,也就是 p1、p2 本身的值可以修改(指向不同的数据),但它们指向的数据不能被修改。

在最后一种情况下,指针是只读的,也就是 p3 本身的值不能被修改

3.#define关键词的用法

#define 关键字有两个作用,一个是定义标识符,第二个是定义宏。

#define 叫做宏定义命令,它也是C语言预处理命令的一种。所谓宏定义,就是用一个标识符来表示一个字符串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。

宏定义的一般形式为:

#define  宏名  字符串
//字符串可以是数字、表达式、if 语句、函数等。
  •  宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单粗暴的替换。预处理程序对它不作任何检查,如有错误,只能在编译已被宏展开后的源程序时发现。
  • 宏定义不是说明或语句,在行末不必加分号。
  •  宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用​#undef​
#include<stdio.h>
#define price 3
int main()
{
int n,sum;
printf("请输入商品数量:n");
scanf("%d",&n);
sum=n*price;
printf("总价为:%d",sum);
return 0;
}

【C语言_20】const与#define的用法及区别

4.conat与#define的区别

1.#define是预编译指令,而const是普通变量的定义。define定义的宏是在预处理阶段展开的,而const定义的只读变量是在编译运行阶段使用的。

2.const定义的是变量,而#define定义的是常量。#define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。但const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元。

3.const定义的是变量,而宏定义的是常量,所以const定义的对象有数据类型,而宏定义的对象没有数据类型。所以编译器可以对前者进行类型安全检查,而对后者只是机械地进行字符替换,没有类型安全检查。这样就很容易出问题,即“边际问题”或者说是“括号问题”。

4.const不能重定义,而#define可以通过#undef取消某个符号的定义,再重新定义。


发表评论

相关文章