| 上一篇 | 下一篇 |
|---|---|
| 栈和堆的区别? |
单独说 指针常量和常量指针
const 关键字修饰指针变量,就可以得到指针常量和常量指针
const 与指针结合时,位置决定含义。记住口诀:
const在*左边是指针常量,内容不能改,但指针可以改;const在*右边是常量指针,指针不能改,但内容可以改;*两边都有const,内容和指针都不能改。
| 声明 | 含义 | 能否修改指针? | 能否修改指向的内容? |
|---|---|---|---|
const int *p 或 int const *p |
指针常量(指向常量的指针) | ✔️ 可以(p = &x;) |
❌ 不可以(*p = 10; 错误) |
int *const p = &x; |
常量指针 | ❌ 不可以 | ✔️ 可以(*p = 10;) |
const int *const p = &x; |
指向常量的常量指针 | ❌ 不可以 | ❌ 不可以 |
应用示例:
c
const char *str = "Hello"; // 推荐写法:字符串字面量是只读的
// str[0] = 'h'; // × 运行时可能崩溃(写只读内存)
str = "World"; // √ 指针可变
char buffer[10];
char *const ptr = buffer; // 指针固定指向 buffer
ptr[0] = 'A'; // √ 内容可变
// ptr = another_buffer; // × 指针不可变