C的常量以及常量指针和指针常量

常量介绍

C的常量是一种相对于变量的概念,在程序的运行过程中值不会改变,只能在定义的时候被赋值,无法多次赋值。

常量可以是任何数据类型。

常量定义方法

常量有两种定义方法

    define const
#include <stdio.h>

//记得常量定义为大写,养成良好的编程习惯
#define TEST 3.14
const int WIDTH = 5;

int main()
{
          
   
    printf("TEST的值为%0.4f 
", TEST);
	printf("ZIP的值为%d 
", 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 = &num;
    int const *b = &num;

    //错误:因为指针指向常量,因此不能修改常量的值
    //*b = *b + 1; 

    //指针保存的地址不变,但是地址里的内容可以改变
    *a = *a + 1;

    //错误:常量指针保存的地址不能变
    //a = &test;

    //指针指向常量,常量本身不能改变,但是可以修改指针指向
    b = &test;

    printf("a = %d 
", *a);
    printf("b = %d 
", *b);
}

输出

a = 10 
b = 100

其中pointer to const有多种写法

const int *b = &num;
int const *b = &num;

通过这个例子我们也可以看出,pointer to const并不一定是真的指向常量,只是认为自己指向常量而已。

同时我们可以总结出以下规律:

值是否可以改变 pointer to const const ponter 指针指向的对象 √ × 指针指向的对象的值 × √

注:√表示可以改变,×表示不能改变

经验分享 程序员 微信小程序 职场和发展