请详细介绍const与volatile
时间: 2023-11-12 08:07:46 浏览: 86
Const与Volatile
`const`和`volatile`是C语言中的两个关键字,它们分别用于修饰变量和指针。下面详细介绍一下它们的作用和用法。
## const
`const`关键字用于限定一个变量的值不可被修改。它可以用于修饰普通变量、指针变量、函数参数和函数返回值等。
### 修饰普通变量
当使用`const`修饰一个普通变量时,该变量的值就不能被修改。例如:
```c
const int num = 10;
num = 20; // 编译错误,无法修改const变量的值
```
### 修饰指针变量
当使用`const`修饰一个指针变量时,它就成为了一个指向常量的指针。也就是说,指针变量所指向的内存区域的值不能被修改。例如:
```c
int num = 10;
const int *p = #
*p = 20; // 编译错误,无法通过指针修改const变量的值
```
### 修饰函数参数和返回值
使用`const`修饰函数参数有两个作用:一是告诉函数内部不要修改该参数的值;二是表示该函数不会修改该参数的值,可以提高程序的可读性和安全性。例如:
```c
void print(const char* str) {
printf("%s\n", str);
}
```
使用`const`修饰函数返回值可以避免返回值被修改。例如:
```c
const char* get_string() {
return "hello";
}
```
## volatile
`volatile`关键字用于告诉编译器,变量的值可能会被意外地修改,因此编译器不应该优化掉对该变量的操作。它可以用于修饰普通变量、指针变量和函数参数等。
### 修饰普通变量
当使用`volatile`修饰一个普通变量时,它告诉编译器该变量的值可能会被意外地修改,因此编译器不应该对该变量的操作进行优化。例如:
```c
volatile int num = 10;
while (num == 10) {
// do something
}
```
### 修饰指针变量
当使用`volatile`修饰一个指针变量时,它告诉编译器该指针所指向的内存区域的值可能会被意外地修改,因此编译器不应该对该指针的操作进行优化。例如:
```c
volatile int *p = (int*) 0x00010000;
*p = 10;
```
### 修饰函数参数
使用`volatile`修饰函数参数可以告诉编译器该参数的值可能会被意外地修改,因此编译器不应该对该参数的操作进行优化。例如:
```c
void do_something(volatile int* ptr) {
*ptr = 10;
}
```
在嵌入式系统、操作系统内核等需要直接操作硬件的场景中,使用`volatile`关键字可以确保变量的值与内存中的实际值一致,从而避免出现意外的行为。
阅读全文