目录
1. 常量指针(Pointer to Constant)
2. 指针常量(Constant Pointer)
3. 常量指针常量(Constant Pointer to Constant)
- 常量指针:指针指向的值不能改,但指针本身可以指向其他地址。
- 指针常量:指针本身不能改,但可以修改指向的值。
- 常量指针常量:指针和指针指向的值都不能改。
常量指针(pointer to constant)和指针常量(constant pointer)在C/C++中是两个不同的概念,它们的区别主要在于指针和指向的值哪个是常量。下面详细讲解它们的区别并举例说明。
1. 常量指针(Pointer to Constant)
定义: 常量指针是指向常量的指针,也就是说,通过这个指针无法修改它所指向的值。
语法: const data_type *pointer_name;
或 data_type const *pointer_name;
特性:
- 指向的值是常量,不能通过指针修改它所指向的值。
- 指针本身可以指向其他地址。
示例代码:
#include <stdio.h>int main() {int x = 10;int y = 20;const int *p = &x; // p是一个常量指针,指向xprintf("x = %d\n", *p);// *p = 15; // 错误:不能通过常量指针修改指向的值p = &y; // 可以改变指针p的指向printf("y = %d\n", *p);return 0;
}
解释:
const int *p = &x;
表示p
是一个指向int
类型常量的指针,通过p
不能修改x
的值。p = &y;
是合法的操作,可以改变p
的指向。
2. 指针常量(Constant Pointer)
定义: 指针常量是一个常量指针,意思是指针本身是常量,即指针的地址不能修改,但可以通过它来修改指针所指向的值。
语法: data_type *const pointer_name;
特性:
- 指针本身是常量,不能指向其他地址。
- 可以通过指针修改它所指向的值。
示例代码:
#include <stdio.h>int main() {int x = 10;int y = 20;int *const p = &x; // p是一个指针常量,指向xprintf("x = %d\n", *p);*p = 15; // 可以通过指针常量修改指向的值printf("Modified x = %d\n", *p);// p = &y; // 错误:不能改变指针的指向return 0;
}
解释:
int *const p = &x;
表示p
是一个指针常量,不能改变指针p
的指向。- 可以通过
*p = 15;
修改x
的值。
3. 常量指针常量(Constant Pointer to Constant)
定义: 既是指向常量的指针,又是常量指针,既不能改变指针指向的地址,也不能修改指针指向的值。
语法: const data_type *const pointer_name;
示例代码:
#include <stdio.h>int main() {int x = 10;const int *const p = &x; // p既是指向常量的指针,又是常量指针printf("x = %d\n", *p);// *p = 15; // 错误:不能修改指向的值// p = &x; // 错误:不能改变指针的指向return 0;
}