面试题答案
一键面试在C语言中,const
修饰指针有以下三种不同形式:
- 指针指向的内容不可修改,但指针本身可以修改
int main() {
int num1 = 10, num2 = 20;
const int *ptr = &num1;
// *ptr = 15; // 错误,不能通过指针修改其所指向的内容
ptr = &num2; // 正确,可以修改指针指向
return 0;
}
在这种形式下,const
修饰的是指针所指向的内容,意味着不能通过指针去修改它所指向的内存中的值,但指针本身可以指向其他地址。
- 指针本身不可修改,但指针指向的内容可以修改
int main() {
int num1 = 10, num2 = 20;
int *const ptr = &num1;
*ptr = 15; // 正确,可以修改指针所指向的内容
// ptr = &num2; // 错误,不能修改指针本身
return 0;
}
这里const
修饰的是指针本身,指针一旦初始化指向一个地址,就不能再指向其他地址,但可以通过指针修改其所指向的内容。
- 指针和指针指向的内容都不可修改
int main() {
int num1 = 10;
const int *const ptr = &num1;
// *ptr = 15; // 错误,不能通过指针修改其所指向的内容
// ptr = &num2; // 错误,不能修改指针本身
return 0;
}
这种情况下,const
既修饰了指针所指向的内容,又修饰了指针本身,所以既不能通过指针修改其所指向的内容,也不能修改指针指向其他地址。