在程序运行过程中,其值不能被改变的量称为常量。常量也分为整型、实型、字符型等。常量就像是常规的变量,只不过常量的值在定义后不能进行修改。C 语言中可以使用 const 关键字或者 #define 宏定义来创建常量。本文主要介绍C语言中常量。

1、定义常量

在 C语言中,常量有两种定义方式,分别是使用 #defineconst

1)#define(宏定义)

#define 是 C 语言中的一种预处理器指令,用于定义符号常量。在编译时,编译器会将代码中的符号常量替换为其对应的值。

#define  <宏名/标识符>  <字符串>

2)const

const 关键字用于声明一个变量为常量,一旦初始化后,它的值就不能改变。const 常量必须指定数据类型。可以使用 const 前缀声明指定类型的常量:

const type variable = value;

例如,

#include<stdio.h>
#include<stdlib.h>
void main(){
  //常量方式1
  const int a = 18;
  printf("我的年龄是%d\n", a);
  const char nameStr[] = "cjavapy";
  const int age = 30;
  printf("我叫%s,%d岁\n",nameStr,age);
  //常量方式2  修改一次可以改变全局  define本质就是替换
#define X 100  //不能有;
  printf("数量%d个\n", X);
  printf("数量%d个\n", X*X);
#define PI 3.1415
  int R = 100;
  printf("周长=%f,面积=%f\n", 2 * R*PI, PI*R*R);//f是实数
#define name "cjavapy"
  printf("关键字是%s",name);
  getchar();
}

2、const 与 #define 定义常量的区别

1)const 定义常量

不能直接修改,但是可以间接修改
可以通过直接修改内存进行修改
可以通过指针进行修改

2)#define 定义常量

不能通过指针进行修改,也不能通过内存进行修改,相当于真正意义的常量。

一个标识符被宏定义后,该标识符便是一个宏名。这时,在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换,替换后才进行编译,宏替换是简单的替换。

例如,

#include<stdio.h>
#define VAR 10001
void main()
{
  const int var = 1001;
  printf("%d", var);
  *(int *)(&var) = 101;// 转换常量指针为非常量指针,说明 constant 不算真正的常量
  printf("\n%d", var);
  printf("%d", VAR);// 不能取地址进行修改
  getchar();
}

3、常量指针和指针常量

在 C 语言中,const 关键字也可以用来定义指针的常量性。对于指针常量,可以有两种不同的含义,指向常量的指针是指针指向的内容不可改变,但指针本身可以指向不同的地址。常量指针是指针的值(地址)不可改变,但指针指向的内容可以改变。

1)指向常量的指针

#include <stdio.h>

int main() {
    int num = 10;
    const int *ptr = &num;  // 指向常量的指针
    printf("num = %d\n", *ptr);

    // *ptr = 20;  // 错误:不能通过 ptr 修改 num 的值
    ptr++;  // 但可以让 ptr 指向别的地址
    return 0;
}

2)常量指针

#include <stdio.h>

int main() {
    int num = 10;
    int *const ptr = &num;  // 常量指针
    printf("num = %d\n", *ptr);

    *ptr = 20;  // 可以修改 num 的值
    // ptr++;   // 错误:不能修改 ptr 指向的地址
    return 0;
}

4、枚举类型 (enum)

 C语言中还可以通过 枚举类型 (enum) 来定义一组相关的常量。枚举常量的值默认从 0 开始递增。

#include <stdio.h>

enum Days {SUN, MON, TUE, WED, THU, FRI, SAT};

int main() {
    enum Days today;
    today = WED;
    printf("今天是星期 %d\n", today);  // 输出 3,因为 WED 的值是 3
    return 0;
}

5、定义常量并使用

C语言中常量的定义,并且实际使用的示例,代码如下,

#include <stdio.h>

#define PI 3.14159  // 定义符号常量
const int MAX_SIZE = 100;  // 定义常量

int main() {
    // 使用符号常量 PI
    float radius = 5.0;
    float area = PI * radius * radius;
    printf("圆的面积: %.2f\n", area);

    // 使用 const 常量 MAX_SIZE
    int array[MAX_SIZE];
    printf("数组最大长度: %d\n", MAX_SIZE);

    return 0;
}

推荐文档