1. 程式人生 > >面試題-指標-指標常量與常量指標

面試題-指標-指標常量與常量指標

問題:
問:請用程式碼來解釋以下常量指標與指標常量?

答+分析:

指標常量:指向常量的指標。
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錯。

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