指標入門級指南

2021-08-15 07:18:47 字數 2961 閱讀 1344

似乎大家在oi中都並不是很喜歡使用指標,因為這個東西關於玄學,還會莫名re

但是好多高手很喜歡用指標啊

如果您想學習指標的入門級使用方法,這篇文章可能比較適合你

筆者會把他在oi中使用指標的經驗都寫在這裡(筆者水平 普及<<31????)

在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為「指標」。意思是通過它能找到以它為位址的記憶體單元。[1] 在高階語言中,指標有效地取代了在低階語言,如組合語言與機器碼,直接使用通用暫存器的地方,但它可能只適用於合法位址之中。指標參考了儲存器中某個位址,通過被稱為反參考指標的動作,可以取出在那個位址中儲存的值。作個比喻,假設將電腦儲存器當成一本書,一張內容記錄了某個頁碼加上行號的便利貼,可以被當成是乙個指向特定頁面的指標;根據便利貼上面的頁碼與行號,翻到那個頁面,把那個頁面的那一行文字讀出來,就相當於是對這個指標進行反參考的動作。[2]

#include

using

namespace

std;

int main()

這就是定義了乙個int 型別的指標

為什麼位址還有型別呢?

c++規定乙個型別的指標只能指向同乙個型別的變數,注意,是變數,常數1,2什麼的都不可以

怎麼指向乙個變數呢?

#include

using

namespace

std;

int main()

就是這樣,其中&是取位址符,表示把a的位址傳給了指標p

為了表現他是乙個位址,我們可以嘗試輸出一下p

#include

using

namespace

std;

int main()

結果

這就是a所在位址的編號

那麼我們怎麼調取p指向的變數呢?

我們只需要加上*即可

#include

using

namespace

std;

int main()

結果

如果這裡你都還明白就比較妙了

通俗的理解,就是指向空位址的指標,它不指向任何的物件或者函式

在oi中,我們常常使用c++自帶的巨集null(任何型別都可以使用null)來 作為空指標常量

編譯器自動將其間過程的細節遮蔽,我們不需要關注這個空指標究竟指在**,以及null是如何定義的

但比較重要的一點我們要知道

訪問空指標是不合法的操作,系統在發現你訪問空指標時,會自動強制終止程式

一切萬惡的re幾乎都來自空指標

#include

using

namespace

std;

int main()

希望讀者自己寫一下這個**,親自測試一下,你會發現不會輸出test succeed語句,因為程式在訪問空指標時終止了

要記住,在你操作指標前,要運用一些手段(根據空指標特徵來判斷)這是不是空指標,否則您的程式會死無葬身之地

野指標沒什麼好講的

記住在調取指標前確保它已經被賦過值就好

否則您會莫名tle,re等等奇異操作

下面介紹指標與結構體奇妙的關係

首先是結構體成員的取用

最顯然的方法是加個*

#include

using

namespace

std;

struct qaq

;int main()

;int main()

;int main()

}*root,t[maxn<<1],*tail=t;//陣列是一段連續的位址,陣列名是首位址

node *build(int left,int right)

int mid=(left+right)>>1;

temp->ls=build(left,mid),temp->rs=build(mid+1,right);

return temp;

}

這根不算指標的內容,但是和一會要講的知識點關係密切

什麼是建構函式?

建構函式 ,是一種特殊的方法。主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。特別的乙個類可以有多個建構函式 ,可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載。

我們在定義乙個變數時,我們可以提前寫好乙個函式,讓他在定義時就已經賦好初值,方便我們使用

那這個東西怎麼玩呢

#include

using

namespace

std;

struct qaq

qaq(string s)//過載,在不同情況下呼叫不同的函式

};int main()

inline

void push_up()

inline

int dir()

}*root,*nil,*tmp;

node::node(int x)

inline

void init()

大概就是這樣,把nil當做null就好了

這樣構造乙個空指標,永不翻車

蒟蒻沒什麼可寫了,就先退下了

入門級演算法

今天我想記錄的是一些關於入門級別的演算法。將乙個字串s對映為乙個整數,使得該整數可以唯一的代表字串s。先假設字串均由大寫字母a z構成,不妨設a z為0 25,即將26個大寫字母對應到了二十六進製制中。按照將二十六進製制轉換為十進位制的思路,即可實現將字串對映為整數的需求。題目 給出n個字串 恰好由...

PKI入門級介紹

隨著電子商務的迅速發展,資訊保安已成為焦點問題之一,尤其是網上支付和網路銀行對資訊保安的要求顯得更為突出。為了能在網際網路上開展安全的電子商務活動,公開金鑰基礎設施 pki,public key infrastructure 逐步在國內外得到廣泛應用。我們是否真的需要 pki pki 究竟有什麼用?...

PKI入門級介紹

隨著電子商務的迅速發展,資訊保安已成為焦點問題之一,尤其是網上支付和網路銀行對資訊保安的要求顯得更為突出。為了能在網際網路上開展安全的電子商務活動,公開金鑰基礎設施 pki,public key infrastructure 逐步在國內外得到廣泛應用。我們是否真的需要 pki pki 究竟有什麼用?...