技術文章翻譯(九) 理解C 指標

2021-08-21 09:28:23 字數 2966 閱讀 3186

char ch;            // size=1 byte/8

bit, range=-128 to127,

// equivalent to

signed char ch;

unsigned char uch; // size=1 byte/8

bit, range=0

to255

對於c / c ++中的其他資料型別,也符合類似的推論。

指標是其儲存值的記憶體位址,而不是變數自身的值。這是c++中使用的一種復合型別。另一種叫做引用。引用基本上是指相同記憶體位址變數的別名或替代名稱。另一方面,指標用於變數的間接訪問。指標與引用物件的主要區別:指標是乙個單獨的實體,可以單獨處理,如賦值,複製和在其生命週期內改變其指向的位置。另一方面,引用在這個問題上則非常嚴格。我們甚至無法宣告未進行分配操作的引用。

int val=10;           // integer variable with a initialized value

int &refval1; // uninitialized, not ok

int &refval2=val; // initialized, ok

int *pval1; // uninitialized, ok

int *pval2=0; // initialized, ok, equivalent to nullptr

int *pval3=nullptr; // initialized, ok

int *pval4=&val; // initialized ok, pointing to the

// location designated by val

注意:在c++中,nullptr表示符是一種指標字串。其表示該指標是空的,這種含義是不言自明的。指標內容都有包含一種型別,如真假是bool型別的內容;整數(比如12),是int型別的內容,其他的則依此類推。

int ival=12;   // integer variable initialized with value 12

int *pi=&i; // integer pointer holding the address of ival,

// & means the address

在記憶體中,它的表示形式如下。記憶體位址以十六進製制數來進行表示的。每次執行**時,指標指向的實際位址可能會有所不同。

圖1: 記憶體位址表示

現在,請觀察下面的**,並注意**中給出的相應注釋。

#include

using

namespace

std;

int main()

我們也可以建立乙個指標,用來指向另乙個指標。這稱為雙級指標。按照類似的方式,也可以存在**指標,以此類推。將以下**片段新增到前面的程式中,並結合給出的注釋來計算程式輸出結果。

圖2:雙級指標

int main()
指標還涉及其他一些概念,我們會在另一篇文章中講解它們。但是,這裡講述的是處理指標變數的基本思想。現在,讓我們轉至指標的另外一種有趣的功能,它被稱為函式指標。

int

len(const

string&);

該函式的返回值型別為int,引數為const string&。現在,如果我們想要乙個指向該函式的指標,我們按照以下形式來進行宣告:

int (*pf) (const

string &); // pointer to function

// that returns an integer value

int* func(const

string &); // a function that returns

// an integer pointer

括號(* pf)是必不可少的;否則,它將表達其他的含義,正如上面所展示的那樣。現在,為了初始化它,我們可以按照以下的方式進行。以下兩者都是正確的初始化方法。

pf=len;

pf=&len ;

因此,我們按照以下的任意一種方式來呼叫該函式:

int i1=pf("hello");

int i2=(*pf)("hello");

int i3=len("hello");

下面是講述該關於該概念的完整**列表:

#include

using

namespace

std;

int len(const

string &str)

int main()

#include

using

namespace

std;

int add(int a, int b)

float add(float a, float b)

int main()

編譯器會根據上下文,來確定函式指標的型別,該函式指標必須指向確切的函式。

float product(float f1,float(*pf)(float,float))

// ...

cout<2.6,add)<

c 技術文章

看了c 的經典著作 effective c 之後的感想。大學的時候學校開了c 的課程,我考的還不錯。畢業後就一直搞軟體開發,大概一年前開始用vc做專案。最近靜下心來看了c 的經典著作 effective c 才發現自己的c 水平其實真的很一般!書中提到的有些東西,我竟然從來沒有注意過!還有些竟然是我...

Mybatsi技術文章

基礎教程 mybatis學習 之 一 mybatis簡介與配置mybatis spring mysql mybatis學習的乙個系列部落格,非常詳細 mybatis document mybatis官方學習文件 english 中文文件 原理分析 mybatis 快取機制深度解剖 自定義二級快取 l...

技術文章鏈結

基本css樣式.bootstrap bootstrap教程 菜鳥教程 w3cplus 引領web前沿,打造前端精品教程 sharp and clean symbols glyphicons.com 使用超動感html js開發web應用 angularjs中文社群 angularjs 教程 菜鳥教程...