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

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

返回目录:https://blog.csdn.net/chen1083376511/article/details/82723709

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

答+分析:

指针常量:指向常量的指针。
const int *p1;
int const *p1;两者等价。

const *p1(或者const int *p1),*p1是p1指向的变量的内容,所以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 p2,p2是一个指针,这个指针一旦指向某对象,就不能改变指向为其他对象,所以是一个固定不能改变地址的指针。
#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需要指向x,int *px语句并没有将px指向x的地址,A选项错。

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

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

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/chen1083376511/article/details/82721575
今日推荐