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

常量介绍

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 = &num;
    int const *b = &num;

    //错误:因为指针指向常量,因此不能修改常量的值
    //*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 = &num;
int const *b = &num;

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

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

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

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值