关键字 const

目录

一、符号常量与常变量

二、const的用法

2.1 const常用方法

2.2 const用于指针

2.2.1 p指针所指的对象值不能改变,但是p指针的指向可以改变

2.2.2 常指针p的指向不能改变,但是所指的对象的值可以改变

2.2.3 p所指对象的指向以及对象的值都不可改变

2.3 const用于形参

2.4 const用于结构体



一、符号常量与常变量

#define PI 3.14   //符号常量

const float pi=3.14;  //常变量

符号常量:预处理时对字符进行替换,不占用存储空间

常变量:占用存储空间,但是值不可变。

二、const的用法

2.1 const常用方法

count_num内容不能被修改

const int  count_num =23;
等价于int const  count_num =23; 

2.2 const用于指针

判别方法:

const在 * 的左边,所指对象值是常量; 常量指针

const在 * 的右边,所指的对象是常量。 指针常量

2.2.1 p指针所指的对象值不能改变,但是p指针的指向可以改变

const int* p; 
int const* p;

1 int b = 5;
2 int c = 3;
3 const int *p=&b;
4 *p=6;    //错误,不能通过指针修改所指向的值;
5 p=&c;    //正确,可以修改指针的值 

2.2.2 常指针p的指向不能改变,但是所指的对象的值可以改变

int * const p; 

1 int b = 5;
2 int c = 3;
3 int *const p = &b;
4 *p = 6;  //正确,可以修改指针所值向的值
5 p =&c;   //错误,不可以修改指针的值

2.2.3 p所指对象的指向以及对象的值都不可改变

const int * const p;

2.3 const用于形参

void foo(const int * p)

const用于形参时说明了形参在函数内部不会被改变。这种形式通常用于数组形式的参数中模拟传值调用。这也是const最有用之处,限定函数的形参,这样该函数将不会修改实参指针所指向的数据。这里需要注意得的是,是函数不应该去修改而不是不能修改。

2.4 const用于结构体

typedef struct student {
    char name[32];
    int age;
} Stu_st, *Stu_pst;

struct student取个别名为Stu_st,将struct student *取个别名Stu_pst:
①struct student stu1 等价于 Stu_st stu1
②struct student *stu2 等价于 Stu_pst stu2 等价于 Stu_st *stu2

大多数人认为第一个中const修饰的是stu3指向的对象,第二个中const修饰的是stu4这个指针。 其实编译器来说只认为Stu_pst是一个类型名,所以两个均是表示为修饰的是stu3,stu4这个指针

const Stu_pst stu3;
Stu_pst const stu4;
#include<stdio.h>

typedef struct student {
    char name[32];
    int age;
}Stu_st, *Stu_pst;

int main() {
    const Stu_pst stu3;//定义个常量指针
    Stu_pst const stu4;

    //下面两条语句可以编译通过就证明
    //修饰的是stu3,stu4这个指针,并非stu3,stu4指向的对象。
    stu3->age = 22;
    stu4->age = 23;

    //当指针发生改变时,编译就会报错的
    stu4 = stu3;
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言关键字const用于声明一个常量,即变量的值在声明后不能再被修改。被const修饰的变量只能读取其值,不能修改。 在引用的代码中,第四道代码声明了一个指针p,该指针指向一个常量int型变量a。这意味着p所指向的值不能被修改,同时p本身也不能指向其他的变量。因此,对p进行赋值或者修改*p的值都是非法的操作。 在引用的代码中,const修饰的变量a被声明为常量,即a的值不能被修改。当尝试修改a的值时,编译器会报错。 总结起来,C语言关键字const用于声明常量,常量的值在声明后不能再被修改。常量可以修饰变量或指针,使其成为只读或只指向特定变量的指针。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C语言关键字const详细讲解](https://blog.csdn.net/li1829146612/article/details/119636084)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [[C语言]const关键字详解](https://blog.csdn.net/yjlyyj/article/details/125259458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C语言关键字const和指针的结合使用](https://download.csdn.net/download/weixin_38499706/12743173)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值