指針常量:
[cpp]
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int num1 = 1;
int num2 = 2;
int* const ptr = &num1;
cout<<*ptr<<endl;
//改變ptr的值
//error C3892: “ptr”: 不能給常量賦值
//ptr = &num2;
//cout<<*ptr<<endl;
//用ptr改變其所指向的值
//ok output=3
*ptr = 3;
cout<<*ptr<<endl;
//用其他變量改變ptr所指向的值
//ok output=4
num1 = 4;
cout<<*ptr<<endl;
return 0;
}
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int num1 = 1;
int num2 = 2;
int* const ptr = &num1;
cout<<*ptr<<endl;
//改變ptr的值
//error C3892: “ptr”: 不能給常量賦值
//ptr = &num2;
//cout<<*ptr<<endl;
//用ptr改變其所指向的值
//ok output=3
*ptr = 3;
cout<<*ptr<<endl;
//用其他變量改變ptr所指向的值
//ok output=4
num1 = 4;
cout<<*ptr<<endl;
return 0;
}
指針常量就是這裡的 int * const ptr,ptr是常量不能更改,既不能改變ptr所指向的變量,但是可以用ptr改變ptr所指向的變量的值。
“指針常量”所指向的地址是常量,地址上面的數據是可以變化的。
常量指針:
[cpp]
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int num1 = 1;
int num2 = 2;
const int* ptr = &num1;
cout<<*ptr<<endl;
//改變ptr的值
//ok, output=2
ptr = &num2;
cout<<*ptr<<endl;
//用ptr改變其所指向的值
//error C3892: “ptr”: 不能給常量賦值
//*ptr = 3;
//cout<<*ptr<<endl;
//用其他變量改變ptr所指向的值
//ok, output=4
num1 = 4;
cout<<*ptr<<endl;
return 0;
}
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int num1 = 1;
int num2 = 2;
const int* ptr = &num1;
cout<<*ptr<<endl;
//改變ptr的值
//ok, output=2
ptr = &num2;
cout<<*ptr<<endl;
//用ptr改變其所指向的值
//error C3892: “ptr”: 不能給常量賦值
//*ptr = 3;
//cout<<*ptr<<endl;
//用其他變量改變ptr所指向的值
//ok, output=4
num1 = 4;
cout<<*ptr<<endl;
return 0;
}這裡的const int* ptr,表示ptr所指向的變量的值對ptr來說是常量,既不能用ptr來修改其所指向的變量的值,但是可以用其他的方式修改其所指變量的值。
ptr本身不是常量可以修改,即可以指向其他的變量。
“常量指針”,顧名思義,即指向常量的指針,所指向的地址上的數據對指針來說是常量。
int * const ptr和const int* ptr的區別就在與const放在誰前面,const放在誰前面誰就是常量。