面試題-指標-指標常量與常量指標
問題:
問:請用程式碼來解釋以下常量指標與指標常量?
答+分析:
指標常量:指向常量的指標。
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錯。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------