偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

EasyC++,C++指針初探

開發(fā) 后端
C++可以說(shuō)是成也指針、敗也指針。依靠著指針,我們可以靈活地操控變量?jī)?nèi)存地址,實(shí)現(xiàn)很多獨(dú)有的功能。但也正因?yàn)橹羔槪绕涫鞘褂貌划?dāng)?shù)臅r(shí)候會(huì)產(chǎn)生許多的問(wèn)題。

[[431550]]

大家好,我是梁唐。

這是EasyC++系列的第15篇,咱們來(lái)聊聊C++中的指針。

想要追求更好閱讀體驗(yàn)的同學(xué),可以點(diǎn)擊文末的「閱讀原文」,訪問(wèn)github倉(cāng)庫(kù)。

指針初探

前言

C++可以說(shuō)是成也指針、敗也指針。依靠著指針,我們可以靈活地操控變量?jī)?nèi)存地址,實(shí)現(xiàn)很多獨(dú)有的功能。但也正因?yàn)橹羔槪绕涫鞘褂貌划?dāng)?shù)臅r(shí)候會(huì)產(chǎn)生許多的問(wèn)題。導(dǎo)致許多工程師對(duì)于C++以及指針深惡痛絕,以至于C++之后的許多語(yǔ)言都摒棄了指針的設(shè)計(jì),比如Java和Python。

我們先把頭疼的內(nèi)容放一放,先從一些簡(jiǎn)單的概念開始。

首先要明確的是指針是一個(gè)變量,它特殊的點(diǎn)在于雖然同樣是變量,它存儲(chǔ)的并不是值,而是一個(gè)內(nèi)存地址。內(nèi)存地址顧名思義就是存放在內(nèi)存當(dāng)中的位置,對(duì)于非指針的變量, 我們也可以使用&操作符去獲取它的地址。這就是為什么我們使用scanf在讀取變量的時(shí)候,需要在變量名之前加上一個(gè)&符號(hào)。

  1. int a; 
  2. scanf("%d", &a); 

目的就是為了將a變量的地址傳給scanf函數(shù),從而將屏幕當(dāng)中讀取到的內(nèi)容填寫到a變量對(duì)應(yīng)的地址當(dāng)中。

我們也可以直接輸出一個(gè)變量的地址,但輸出結(jié)果是一個(gè)十六進(jìn)制的數(shù),代表一個(gè)內(nèi)存位置。如果大家學(xué)過(guò)匯編或者是了解過(guò)底層的話,應(yīng)該不陌生。這個(gè)輸出的結(jié)果是給機(jī)器看的,人類無(wú)法讀懂。

  1. int a; 
  2. cout << &a << endl; 

聲明和初始化

指針和普通變量不同,它存儲(chǔ)的值是地址。所以在聲明指針的時(shí)候,也會(huì)有一點(diǎn)細(xì)小的區(qū)別。我們通過(guò)*符號(hào)創(chuàng)建指針,*運(yùn)算符稱為間接值(indirect value)或解除引用(dereferencing),現(xiàn)在理解這兩個(gè)概念可能有些費(fèi)勁,沒(méi)關(guān)系我們可以先放一放。只許看記住使用*創(chuàng)建指針即可,*寫在類型和變量名中間,如:

  1. int * p; 

這樣我們就創(chuàng)建了一個(gè)int型的指針,它的名字叫做p。關(guān)于*的位置,有些人喜歡緊跟著變量類型,有些人喜歡緊跟著變量名。其實(shí)都可以,看個(gè)人喜好。傳統(tǒng)上來(lái)說(shuō)C程序員喜歡后者,突出ptr是一個(gè)指針。

  1. int *ptr; 

C++程序員更喜歡前者,突出是一個(gè)int型的指針:

  1. int* ptr; 

這兩種都可以,對(duì)于編譯器來(lái)說(shuō)沒(méi)有任何區(qū)別。但是要注意的是,每一個(gè)指針變量都需要一個(gè)*:

  1. int a, *ptr; 

前面說(shuō)了,由于指針的值是一個(gè)地址,所以我們?cè)趯?duì)指針進(jìn)行初始化或者賦值的時(shí)候,就需要用到取地址符。

  1. int a = 3; 
  2. int *p = &a; // 獲取了a的地址 

當(dāng)我們有了指針變量之后,我們可以使用*來(lái)訪問(wèn)它指向的內(nèi)存地址的值。

  1. int a = 3; 
  2. int *p = &a; 
  3.  
  4. cout << *p << endl; //output: 3 

要注意的是,由于指針p指向a的地址,所以當(dāng)我們通過(guò)*符號(hào)修改了p指向的值之后,a的值一樣會(huì)發(fā)生變化。

  1. *p = 5; 
  2. cout << a << endl; //output: 5 

 正因?yàn)橹羔樣羞@樣的特性,所以使用的時(shí)候千萬(wàn)小心……

本文轉(zhuǎn)載自微信公眾號(hào)「Coder梁」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Coder梁公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: Coder梁
相關(guān)推薦

2021-10-29 09:44:50

C++指針變量

2021-12-12 18:13:54

C++This指針

2021-10-26 00:19:51

C++結(jié)構(gòu)體存儲(chǔ)

2021-11-09 10:38:16

C++Const指針

2021-10-21 18:52:00

C++數(shù)組存儲(chǔ)

2021-10-31 20:24:24

C++for循環(huán)

2021-11-10 10:48:36

C++函數(shù)指針

2021-12-29 20:31:40

C++多態(tài)指針

2021-11-26 00:03:20

C++編譯常量

2021-12-09 10:56:50

函數(shù)C++原型

2021-10-20 14:03:06

C++運(yùn)算符類型

2021-11-01 15:35:31

C++自增自減

2021-12-08 10:43:09

C++實(shí)現(xiàn)

2021-12-10 10:45:36

C++函數(shù)Stock

2021-12-30 14:58:58

C++函數(shù)動(dòng)態(tài)

2021-12-11 19:02:03

函數(shù)C++對(duì)象

2021-11-27 11:50:09

C++靜態(tài)持續(xù)

2021-10-28 19:27:08

C++指針內(nèi)存

2021-10-26 15:36:17

C++枚舉值類型

2021-12-05 18:20:42

C++空間特性
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)