常量介绍
C的常量是一种相对于变量的概念,在程序的运行过程中值不会改变,只能在定义的时候被赋值,无法多次赋值。
常量可以是任何数据类型。
常量定义方法
常量有两种定义方法
- define
- const
#include <stdio.h>
//记得常量定义为大写,养成良好的编程习惯
#define TEST 3.14
const int WIDTH = 5;
int main()
{
printf("TEST的值为%0.4f \n", TEST);
printf("ZIP的值为%d \n", ZIP);
return 0;
}
const使用方法
const在定义的时候就需要被赋值,不能先定义再赋值,也不能只定义不赋值。
唯一正确的定义方式
const int WIDTH = 5;
指针常量和常量指针
指针常量:指向常量的指针(pointer to const)
常量指针:指针本身是常量,即指针所保存的地址不能改变(const pointer),因此常量指针在定义的时候需要指定指向的地址。
这两个名字很容易混淆,经常遇到指针常量/常量指针区分不清的情况。因此我们把两种英文名字写出来,英文名字很贴切。用翻译英文名字来记忆。
指向常量的指针 → pointer(指针) to const(常量)→指针常量
指针本身是常量 → const(常量) pointer(指针)→常量指针
这里举个例子
#include <stdio.h>
int main(){
int num = 9;
int test = 100;
// *在const前面就是指针本身是常量 不然就是指针指向常量
int *const a = #
int const *b = #
//错误:因为指针指向常量,因此不能修改常量的值
//*b = *b + 1;
//指针保存的地址不变,但是地址里的内容可以改变
*a = *a + 1;
//错误:常量指针保存的地址不能变
//a = &test;
//指针指向常量,常量本身不能改变,但是可以修改指针指向
b = &test;
printf("a = %d \n", *a);
printf("b = %d \n", *b);
}
输出
a = 10
b = 100
其中pointer to const有多种写法
const int *b = #
int const *b = #
通过这个例子我们也可以看出,pointer to const并不一定是真的指向常量,只是认为自己指向常量而已。
同时我们可以总结出以下规律:
值是否可以改变 | pointer to const | const ponter |
---|---|---|
指针指向的对象 | √ | × |
指针指向的对象的值 | × | √ |
注:√表示可以改变,×表示不能改变