面试题答案
一键面试const int *ptr1 = #
- 含义:
ptr1
是一个指向const int
类型的指针。即指针所指向的值不能通过ptr1
来修改,但指针ptr1
本身可以指向其他地址。 - 例如:
// *ptr1 = 20; // 编译错误,不能通过ptr1修改所指向的值 int num2 = 20; ptr1 = &num2; // 合法,ptr1可以指向其他地址
- 含义:
int const *ptr2 = #
- 含义:与
const int *ptr1
完全等价,ptr2
也是一个指向const int
类型的指针。指针所指向的值不能通过ptr2
来修改,但指针ptr2
本身可以指向其他地址。 - 例如:
// *ptr2 = 30; // 编译错误,不能通过ptr2修改所指向的值 int num3 = 30; ptr2 = &num3; // 合法,ptr2可以指向其他地址
- 含义:与
int * const ptr3 = #
- 含义:
ptr3
是一个常量指针,它一旦初始化指向了num
,就不能再指向其他地址,但可以通过ptr3
修改其所指向的值。 - 例如:
*ptr3 = 40; // 合法,可以通过ptr3修改所指向的值 // int num4 = 40; // ptr3 = &num4; // 编译错误,ptr3不能再指向其他地址
- 含义:
const int * const ptr4 = #
- 含义:
ptr4
既是一个指向const int
类型的指针,又是一个常量指针。即不能通过ptr4
修改所指向的值,并且ptr4
也不能再指向其他地址。 - 例如:
// *ptr4 = 50; // 编译错误,不能通过ptr4修改所指向的值 // int num5 = 50; // ptr4 = &num5; // 编译错误,ptr4不能再指向其他地址
- 含义:
上述代码本身都不会导致编译错误,它们展示了const
与指针结合的不同用法。但如果按照注释中错误的方式使用指针,就会产生编译错误。