C++面试题-指针-指针常量与常量指针

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liubing8609/article/details/86135823

C++面试题-指针-指针常量与常量指针

请用代码来解释以下常量指针与指针常量?

指针常量:指向常量的指针。

const int *p1;

int const *p1;

上述两者等价。

const *p1(或者const int *p1),*p1p1指向的变量的内容,所以p1所指向的内存区的值不能被改变。

#include<iostream>

using namespace std;

int main(){

 int a = 1;

 int b = 2;

// int const *p1=&a;也可以

 const int *p1=&a;//p1保存的是a地址

 cout << p1 << endl;

 p1 = &b;//p1保存的是b地址 

//*p1=4;是错误的

 cout << p1 << endl;

 return 0;

}

常量指针:把指针指向某对象并且不可被改变指向的变量。

int *const p2=&a; // 必须初始化,是因为指针需要保存一个始终不会改变的地址。

const p2p2是一个指针,这个指针一旦指向某对象,就不能改变指向为其他对象,所以是一个固定不能改变地址的指针。

#include<iostream>

using namespace std;

int main(){

 int a = 1;

 int b = 2;

 int *const p2=&a;

 //p2 = &b;错误,不能再指向其他变量 

 cout << *p2 << endl;

 *p2 = 520;//可以改变指向变量的值

 cout << *p2 << endl;

 return 0;

}

 

问:设有如下语句:

int x;

_____

*px=0;

则选择以下哪条语句可将x值设置为0()。

A.int *px;                 B.int *const px=&x;

C.int const px=&x;     D.const int *px=&x;

答:B

分析:

由于*px=0可知,px是一个指针,排除了C选项。由于px需要指向xint *px语句并没有将px指向x的地址,A选项错。

B是一个常量指针,指针本身是常量,即指针指向变量的地址不能被改变(即改变指向的变量),但是所指向变量的值可以被改变,所以B正确。

D是一个指针常量,指向变量的值不能被改变,但是指针指向的地址是可以改变的,D错。

猜你喜欢

转载自blog.csdn.net/liubing8609/article/details/86135823