日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

如何理解C++指針常量和常量指針_C 語言

作者:??zidea???? ? 更新時間: 2022-07-31 編程語言

前言:

應該怎樣正確的姿勢去理解指針常量和常量指針,到我發布這篇文章時候,感覺自己對指針常量和常量指針理解還是不夠透徹,可能接觸還是比較少吧,希望自己用一個月的時間可以將自己的 c++ 的功力有一個提升,可以靠 c++ 來混一碗飯。

術語

  • 常量
  • 指針

和引用類似,可以定義指針可以指向常量或者非常量類型。

常量指針(pointer to const)

常量指針,根據字面上理解就是指向常量的一個指針,也就是指針保存了一個存放常量的地址,所以

Like a references to const,a?pointer to const?may not be used to change the object to which the pointer points。we may store the address of a const object only in a ** pointer to const**

const double pi = 3.14;// pi 是一個常量,常量一旦賦值就不允許改變
double* ptr = π//

這里定義一個普通指針,普通指針變量是無法存儲保存常量的內存地址。

const double* ptr = π

那么要定義一個指針變量指向一個存儲常量的地址,就需要在前面添加?const?修飾符

*ptr = 12;

既然指向的值是一個常量,也就是無法用?*ptr?為一個常量進行賦值。

那么常量指針是否指向存放從一個非常量的內存地址,答案是可以的,例如下面代碼

int a = 12;
const int*  p = &a;

接下來我們來簡單看一下代碼思考一下,這里稍微有點復雜,首先大家需要思考一下下面代碼是否可以執行,然后大家再思考一下兩次?*p?輸出分別是什么,這里需要大家動手試一試,我就不直接給出輸出結果了

int a = 12;
const int* p = &a;

cout << *p << endl;
a = 2;

cout << *p << endl;

我們在看一個例子,這里 const 是修飾 double 可以將?const double*?看作一個整體,也就是指針指向內存地址中存放存放的值是常量。

double pi = 3.14;// pi 是一個常量,常量一旦賦值就不允許改變
const double* ptr = &pi;
double val = 2;
ptr = &val;
cout << *ptr << endl;

指針常量(指針)

指針常量,我們先不看代碼,僅從指針常量字面上來進行理解,指針常量落在常量上,常量也就是一個一旦賦值就不能隨意改變量,這樣理解吧,突然一個好的想法,無論指針常量還是常量指針,哪一個詞在前面哪一個就是不能改變的。

int main()
{
	int a = 12;
	int* const p = &a;

	cout << "p: " << *p << endl;


	return 0;
}

也就是指針指向地址不能改變?p = &b;?這樣賦值是行不通的,而指針指向內存中存放的值是可以改變的。

*p = 20;

這時候輸出?p:20?也就是說明是可以改變指針指向地址對于內存存儲的值,這就是指針常量,本質是一個常量,常量類型指針類型,

原文鏈接:https://juejin.cn/post/7104980484064542750

欄目分類
最近更新