const int* a; 和 int const* a;
这两个声明是等价的,它们都声明了一个指向常量整数的指针。这意味着指针 `a` 所指向的整数是常量,不能通过指针 `a` 来修改它的值,但是可以修改指针 `a` 指向的地址。
int* const a;
声明了一个指向整数的常量指针。这意味着指针 `a` 是一个常量,不能修改指针 `a` 指向的地址,但是可以通过指针 `a` 来修改它所指向的整数的值。
代码说明
#include <stdio.h>
int main() {
int x = 10;
const int* a; // 或者 int const* a;
int const* b; // 这两种声明是等价的
int* const c; // 声明一个指向整数的常量指针
a = &x; // 正确:可以让指针指向 x
b = &x; // 正确:可以让指针指向 x
// c = &x; // 错误:常量指针无法重新赋值
// 修改 x 的值
x = 20;
// 通过指针来访问所指向的值
printf("a: %d\n", *a); // 输出:20
printf("b: %d\n", *b); // 输出:20
// printf("c: %d\n", *c); // 错误:常量指针指向的值无法修改
return 0;
}
const int* a;
和int const* b;
声明了两个指向整数常量的指针。可以通过它们来访问它们所指向的值,但不能通过它们来修改它们所指向的值。int* const c;
声明了一个指向整数的常量指针。可以通过c
来访问和修改它所指向的值,但不能通过c
来修改它的指向的地址。
理解指针是常量和指针指向的值是常量之间的区别