关键字 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;
}