C++復(fù)合類型總結(jié)(指針)

引用是變量的別名碍遍,指針就是變量地址的別名噪叙。 與引用類似渐裂,指針也實(shí)現(xiàn)了對(duì)其他對(duì)象的間接訪問豺旬。然而指針與引用又有很多不同點(diǎn):

  1. 指針本身是一個(gè)對(duì)象,允許對(duì)指針賦值和拷貝柒凉。而且在指針的聲明周期內(nèi)它可以先后指向幾個(gè)不同的對(duì)象族阅。
  2. 指針無須在定義時(shí)賦初始值。(不太建議這個(gè)做法)和其他內(nèi)置類型一樣膝捞,在塊作用域內(nèi)定義的指針如果沒有被初始化坦刀,也將擁有一個(gè)不確定的值。

一蔬咬、基本操作

1. 初始化

建議初始化所有指針鲤遥。 使用未經(jīng)初始化的指針是引發(fā)運(yùn)行時(shí)錯(cuò)誤的一大原因。和其他變量一樣林艘,訪問未經(jīng)初始化的指針?biāo)l(fā)的后果也是無法預(yù)計(jì)的盖奈。通常這一行為將造成程序崩潰,而且一旦崩潰狐援,要想定位到出錯(cuò)位置將是特別棘手的問題钢坦。

在大多數(shù)編譯器環(huán)境下,如果使用了未經(jīng)初始化的指針咕村,則改指針?biāo)純?nèi)存空間的當(dāng)前內(nèi)容將被看作一個(gè)地址值场钉。訪問該指針,相當(dāng)于去訪問一個(gè)本不存在的位置上的本不存在的對(duì)象懈涛。糟糕的是,如果指針?biāo)純?nèi)存空間恰好有內(nèi)容泳猬,而這些內(nèi)容又被當(dāng)做了某個(gè)地址批钠,我們就很難分清它到底是合法的還是非法的了宇植。
因此建議初始化所有的指針,并且在可能的情況下埋心,盡量等定義了對(duì)象之后再定義指向它的指針指郁。 如果是實(shí)在不清楚指針應(yīng)該指向何處,就把它初始化為nullptr或者0拷呆,這樣程序就能檢測(cè)并知道它沒有指向任何具體的對(duì)象了闲坎。

int i = 42;
int *p1 = 0; //等同于int *p1=nullptr;
int *p2 = &i;
int *p3; //不推薦

過去的程序還會(huì)用到一個(gè)名為NULL的預(yù)處理變量(preprocessor variable)來給指針賦值,這個(gè)變量在頭文件cstdlib中定義茬斧,它的值為0腰懂。在新標(biāo)準(zhǔn)下,現(xiàn)在的C++程序最好使用nullptr项秉,同時(shí)盡量避免使用NULL.

2.賦值

在C++里绣溜,指針也是個(gè)數(shù)據(jù)對(duì)象,所以也支持相互之間的直接賦值娄蔼。

int i = 42;
int *p1 = i;
int *p2;

p2 = p3;
p2 = 0;

此外怖喻,要將數(shù)字值作為地址來使用,應(yīng)通過強(qiáng)制類型轉(zhuǎn)換將數(shù)字轉(zhuǎn)換為適當(dāng)?shù)牡刂奉愋汀?/p>

int *pt;
pt = (int *)0xB8000000; //type match

3.算術(shù)運(yùn)算

指針是一個(gè)用數(shù)值表示的地址岁诉。因此锚沸,您可以對(duì)指針執(zhí)行算術(shù)運(yùn)算√檠ⅲ可以對(duì)指針進(jìn)行四種算術(shù)運(yùn)算:++咒吐、--、+属划、-恬叹。
假設(shè) ptr 是一個(gè)指向地址 1000 的整型指針,是一個(gè) 32 位的整數(shù)同眯,讓我們對(duì)該指針執(zhí)行下列的算術(shù)運(yùn)算:

ptr++;

在執(zhí)行完上述的運(yùn)算之后绽昼,ptr 將指向位置 1004,因?yàn)?ptr 每增加一次须蜗,它都將指向下一個(gè)整數(shù)位置(即一個(gè)基本類型長度單位)硅确,即當(dāng)前位置往后移 4 個(gè)字節(jié)。這個(gè)運(yùn)算會(huì)在不影響內(nèi)存位置中實(shí)際值的情況下明肮,移動(dòng)指針到下一個(gè)內(nèi)存位置菱农。其他三個(gè)運(yùn)算符號(hào)的原理相同。

4.指針的比較

指針可以用關(guān)系運(yùn)算符進(jìn)行比較柿估,如 ==循未、< 和 >。如果 p1 和 p2 指向兩個(gè)相關(guān)的變量秫舌,比如同一個(gè)數(shù)組中的不同元素的妖,則可對(duì) p1 和 p2 進(jìn)行大小比較绣檬。

int  var[MAX] = {10, 100, 200};
int  *ptr;
 
// 指針中第一個(gè)元素的地址
ptr = var;
int i = 0;
while ( ptr <= &var[MAX - 1] ){
   cout << "Address of var[" << i << "] = ";
   cout << ptr << endl;
 
   cout << "Value of var[" << i << "] = ";
   cout << *ptr << endl;
 
   // 指向上一個(gè)位置
   ptr++;
   i++;
}

5.指向指針的引用

指針是對(duì)象,所以存在對(duì)指針的引用嫂粟。

int i = 42;
int *p = &i;
int *&r = p;

cout << "Dereference r value:" << *r << endl;
*r = 50;
cout << "Dereference p value:" << *p << endl;

二娇未、指針和動(dòng)態(tài)內(nèi)存

C++ 程序中的內(nèi)存分為兩個(gè)部分:

  • 棧(stack):在函數(shù)內(nèi)部聲明的所有變量都將占用棧內(nèi)存。
  • 堆(heap):這是程序中未使用的內(nèi)存星虹,在程序運(yùn)行時(shí)可用于動(dòng)態(tài)分配內(nèi)存零抬。

很多時(shí)候,無法提前預(yù)知需要多少內(nèi)存來存儲(chǔ)某個(gè)定義變量中的特定信息宽涌,所需內(nèi)存的大小需要在運(yùn)行時(shí)才能確定平夜。指針的一個(gè)重要作用是,在運(yùn)行階段分配未命名的內(nèi)存以存儲(chǔ)值护糖。

在 C++ 中褥芒,可以使用特殊的運(yùn)算符為給定類型的變量在運(yùn)行時(shí)分配堆內(nèi)的內(nèi)存,這會(huì)返回所分配的空間地址嫡良。這種運(yùn)算符即new運(yùn)算符锰扶。如果您不再需要?jiǎng)討B(tài)分配的內(nèi)存空間,可以使用delete運(yùn)算符寝受,刪除之前由new運(yùn)算符分配的內(nèi)存坷牛。

A. new運(yùn)算符

使用new運(yùn)算符來為任意的數(shù)據(jù)類型動(dòng)態(tài)分配內(nèi)存的通用語法。下面的例子就是運(yùn)行階段為int值分配未命名的內(nèi)存很澄,并使用指針來訪問這個(gè)值京闰。我們需要告訴new,需要為哪種數(shù)據(jù)類型分配內(nèi)存:new將找到一個(gè)長度正確的內(nèi)存塊甩苛,并返回該內(nèi)存的地址蹂楣。我們接下來的事情就是用指針來存儲(chǔ)這個(gè)地址值。

int *pt = new int;  //allocate space for an int
*pt = 1001;         //store a value there

要特別指出來讯蒲,pt的值存儲(chǔ)在棧(stack)的內(nèi)存區(qū)域中痊土,而new從堆(heap)或自由存儲(chǔ)區(qū)(free store)的內(nèi)存區(qū)域分配內(nèi)存。malloc()函數(shù)在 C 語言中就出現(xiàn)了墨林,在 C++ 中仍然存在赁酝,但建議盡量不要使用malloc()函數(shù)。newmalloc()函數(shù)相比旭等,其主要的優(yōu)點(diǎn)是酌呆,new不只是分配了內(nèi)存,它還創(chuàng)建了對(duì)象搔耕。

B. delete運(yùn)算符

delete將使用完后的內(nèi)存歸還到內(nèi)存池里隙袁,防止內(nèi)存被耗盡。一定要配對(duì)使用deletenew,否則將發(fā)生內(nèi)存泄露(memory leak)藤乙,也就是猜揪,被分配的內(nèi)存再也無法使用了惭墓。如果內(nèi)存泄露嚴(yán)重坛梁,則程序?qū)⒂捎诓粩鄬ふ腋鄡?nèi)存而終止。

int *ps = new int;  //ok
delete ps;          //ok
int jugs = 5;       //ok
int *pi = &jugs;    //ok
delete pi;          //not allowed, memory not allocated by new

注意腊凶,使用delete的關(guān)鍵在于划咐,將它用于new分配的內(nèi)存,而不是用于使用了new的指針钧萍。
重要的事情說三遍:植!风瘦!
只能用delete來釋放使用new分配的內(nèi)存队魏,同時(shí)對(duì)空指針使用delete是安全的。
只能用delete來釋放使用new分配的內(nèi)存万搔,同時(shí)對(duì)空指針使用delete是安全的胡桨。
只能用delete來釋放使用new分配的內(nèi)存,同時(shí)對(duì)空指針使用delete是安全的瞬雹。

C. new創(chuàng)建動(dòng)態(tài)數(shù)組

通常昧谊,對(duì)于大型數(shù)據(jù)(如數(shù)組、字符串和結(jié)構(gòu))酗捌,應(yīng)使用new呢诬。例如要編寫一個(gè)程序,它是否需要數(shù)組取決于運(yùn)行時(shí)用戶提供的信息胖缤。在編譯時(shí)給數(shù)組分配內(nèi)存被稱為靜態(tài)聯(lián)編(static binding)尚镰,如果通過聲明來創(chuàng)建數(shù)組,則在程序被編譯時(shí)將為它分配內(nèi)存空間哪廓。不管程序最終是否用到數(shù)組狗唉,數(shù)組都在那里占用了內(nèi)存。而使用new撩独,如果在運(yùn)行時(shí)需要數(shù)組敞曹,則創(chuàng)建它;如果不需要综膀,則不創(chuàng)建澳迫,還可以在程序運(yùn)行時(shí)選擇數(shù)組的長度,這被稱為動(dòng)態(tài)聯(lián)編(dynamic binding)剧劝。

int *psome = new int[3];    //get a block of 3 ints
psome[0] = 1;
psome[1] = 2;
psome[2] = 3;
std::cout << "psome[0] is " << psome[0]<< std::endl;
psome = psome + 1;           //increment the pointer
std::cout << "Now, psome[0] is " << psome[0]<< std::endl;
psome = psome - 1;           //point back to beginning; if not, the program will break down
delete []psome;              //free a dynamic array

二維數(shù)組

int **array; 
// 假定數(shù)組第一維長度為 m滋捶, 第二維長度為 n
// 動(dòng)態(tài)分配空間
array = new int *[m];
for(int i = 0; i < m; i++)
{
    array[i] = new int [n]  ;
}
//釋放
for(int i = 0; i < m; i++)
{
    delete [] arrar[i];
}
delete [] array;

三、函數(shù)和指針

A.定義

每一個(gè)函數(shù)都占用一段內(nèi)存單元舟山,它們有一個(gè)起始地址,指向函數(shù)入口地址的指針稱為函數(shù)指針谣妻。

B.說明

  1. 要注意區(qū)分下面兩個(gè)語句:
int (*p)(int a, int b);  //p是一個(gè)指向函數(shù)的指針變量,所指函數(shù)的返回值類型為整型
int *p(int a, int b);    //p是函數(shù)名卒稳,此函數(shù)的返回值類型為整型指針
  1. 指向函數(shù)的指針變量不是固定指向哪一個(gè)函數(shù)的蹋半,而只是定義了一個(gè)類型的變量,它是專門用來存放函數(shù)的入口地址的充坑;在程序中把哪一個(gè)函數(shù)的地址賦給它减江,它就指向哪一個(gè)函數(shù)。
void a(int);
void c(int);
void (*b)(int);
b = a;
b = c;
  1. 定義了一個(gè)函數(shù)指針并讓它指向了一個(gè)函數(shù)后捻爷,對(duì)函數(shù)的調(diào)用可以通過函數(shù)名調(diào)用辈灼,也可以通過函數(shù)指針調(diào)用(即用指向函數(shù)的指針變量調(diào)用)。在給函數(shù)指針變量賦值時(shí)也榄,只需給出函數(shù)名巡莹,而不必給出參數(shù)。
int max(int x, int y);    //函數(shù)max的原型
int (*p)(int a, int b);   //指針p的定義

//將函數(shù)max的入口地址賦給指針變量p
//p就是指向函數(shù)max的指針變量甜紫,也就是p和max都指向函數(shù)的開頭降宅。
p = max;  
p(2,4); //效果等同于max(2,4);
  1. 在一個(gè)程序中,指針變量p可以先后指向不同的函數(shù)棵介,但一個(gè)函數(shù)不能賦給一個(gè)不一致的函數(shù)指針(即不能讓一個(gè)函數(shù)指針指向與其類型不一致的函數(shù))
 //聲明函數(shù)
int fn1(int x, int y); 
int fn2(int x);     
//定義函數(shù)指針
int (*p1)(int a, int b); int (*p2)(int a);  
p1 = fn1; //ok
p2 = fn2; //ok
p1 = fn2; //compile error
  1. 函數(shù)指針只能指向函數(shù)的入口處钉鸯,而不可能指向函數(shù)中間的某一條指令。不能用*(p+1)來表示函數(shù)的下一條指令邮辽。

  2. 函數(shù)指針變量常用的用途之一是把指針作為參數(shù)傳遞到其他函數(shù)唠雕。

C.舉個(gè)栗子

#include <iostream>
using namespace std;
#include <conio.h>
 
int max(int x, int y); //求最大數(shù)
int min(int x, int y); //求最小數(shù)
int add(int x, int y); //求和
void process(int i, int j, int (*p)(int a, int b)); //應(yīng)用函數(shù)指針
 
int main()
{
    int x, y;
    cin>>x>>y;
 
    cout<<"Max is: ";
    process(x, y, max);
 
    cout<<"Min is: ";
    process(x, y, min);
 
    cout<<"Add is: ";
    process(x, y, add);
 
    getch();
    return 0;
}
 
int max(int x, int y){
    return x > y ? x : y;
}
 
int min(int x, int y){
    return x > y ? y : x;
}
 
int add(int x, int y){
    return x + y;
}
 
void process(int i, int j, int (*p)(int a, int b)){
    cout<<p(i, j)<<endl;
}


四、void*指針

A.定義

void*定義一個(gè)void類型的指針吨述,它不指向任何類型的數(shù)據(jù)岩睁,意思是,void*指針“指向空類型”或“不指向確定的類型”揣云,而不要理解為void*指針能指向“任何的類型”數(shù)據(jù)捕儒。簡(jiǎn)而言之:void* 只提供一個(gè)地址,沒有指向邓夕。

double obj = 3.14, *pd = &obj;
void *pv = &obj;
pv = pd;

B.作用

void*指針不指向任何數(shù)據(jù)類型刘莹,它屬于一種未確定類型的過渡型數(shù)據(jù),因此如果要訪問實(shí)際存在的數(shù)據(jù)焚刚,必須將void*指針強(qiáng)轉(zhuǎn)成為指定一個(gè)確定的數(shù)據(jù)類型的數(shù)據(jù)点弯,如int*string*等矿咕。不允許使用void*指針操作它所指向的對(duì)象抢肛,例如狼钮,不允許對(duì)void*指針進(jìn)行解引用。不允許對(duì)void*指針進(jìn)行算術(shù)操作捡絮。

當(dāng)進(jìn)行純粹的內(nèi)存操作時(shí)熬芜,或者傳遞一個(gè)指向未定類型的指針時(shí),可以使用void指針福稳。void指針也常常用作函數(shù)指針涎拉。

在較早版本的C中,通過字符指針(char *)實(shí)現(xiàn)的灵寺,但是這容易產(chǎn)生混淆曼库,因?yàn)槿藗儾蝗菀着袛嘁粋€(gè)字符指針究竟是指向一個(gè)字符串区岗,還是指向一個(gè)字符數(shù)組略板,或者僅僅是指向內(nèi)存中的某個(gè)地址。在C中慈缔,它們被廣泛使用叮称,但是在 C++ 我認(rèn)為它們很少,如果有必要藐鹤,因?yàn)槲覀冇卸鄳B(tài)性瓤檐,模板 等等 它提供了一個(gè)更清潔和更安全的方法來解決C中的同一個(gè)問題。

void*主要用途:
a.void指針一般用于應(yīng)用的底層娱节,比如malloc函數(shù)的返回類型是void指針挠蛉,需要再強(qiáng)制轉(zhuǎn)換;
b.文件句柄HANDLE也是void指針類型肄满,這也是句柄和指針的區(qū)別谴古;
c.內(nèi)存操作函數(shù)的原型也需要void指針限定傳入?yún)?shù):

void * memcpy (void *dest, const void *src, size_t len);
void * memset (void *buffer, int c, size_t num );

d. 面向?qū)ο蠛瘮?shù)中底層對(duì)基類的抽象。

// vp1 需要交換的一個(gè)數(shù)的地址
// vp2 需要交換的另一個(gè)數(shù)的地址
// size 為兩個(gè)交換的數(shù)的類型大小稠歉,通過sizeof來計(jì)算
// 這里假設(shè)傳進(jìn)來的是相同數(shù)據(jù)類型的地址掰担,比如兩個(gè)數(shù)都是整數(shù),或者都是字符串等等
void swap(void *vp1, void *vp2, int size)
{
    char *buffer = (char *)malloc(size);
    memcpy(buffer, vp1, size);
    memcpy(vp1, vp2, size);
    memcpy(vp2, buffer, size);
    free(buffer);   
}
int main()
{
    double a = 1.2;
    double b = 0.9;    
    swap(&a, &b, sizeof(double));
    return 0;
}

五怒炸、const和指針

A.指向常量的指針

指向常量的指針带饱,它所指向的內(nèi)容(即地址)可變,但這個(gè)地址里的內(nèi)容不可變阅羹。

const double pi = 3.14;     //pi is const double variable
double *ptr = &pi;          //error:ptr is normal pointer
const double *cptr = &pi;   //ok: cptr is a double const pointer
*cptr = 4.2;                //error:cannot assign value to const variable

const double pp = 6.28;
cptr = &pp;

B.const指針(常量指針)

指針是對(duì)象而引用不是勺疼,因此就像對(duì)其他對(duì)象類型一樣,允許把指針本身定為常量捏鱼。常量指針必須初始化执庐,而且一旦初始化完成,則它的值(存放在指針中的那個(gè)地址)就不能在改變了穷躁。

指針本身是一個(gè)常量并不意味著不能通過指針修改其所指對(duì)象的值耕肩,能否這樣做完全取決于所指對(duì)象的類型因妇。

int errNum = 0;
    int *const curErr = &errNum;
    const double pi = 3.14;
    const double *const pip = &pi;
    *pip = 2.72;                   //error
    cout << curErr << endl;        //0
    (*curErr)++;                   //okay
    cout << errNum << endl;        //1

參考文獻(xiàn)

  1. 《C++ Primer(第5版)》 Stanley B.Lippman, Josee Lajoie, Barbara E.Moo
  2. 《C++ Primer Plus(5th Edition)》
  3. void和void *
  4. C++函數(shù)指針詳解
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市猿诸,隨后出現(xiàn)的幾起案子婚被,更是在濱河造成了極大的恐慌,老刑警劉巖梳虽,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件址芯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡窜觉,警方通過查閱死者的電腦和手機(jī)谷炸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禀挫,“玉大人旬陡,你說我怎么就攤上這事∮镉ぃ” “怎么了描孟?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長砰左。 經(jīng)常有香客問我匿醒,道長,這世上最難降的妖魔是什么缠导? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任廉羔,我火速辦了婚禮,結(jié)果婚禮上僻造,老公的妹妹穿的比我還像新娘憋他。我一直安慰自己,他們只是感情好嫡意,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布举瑰。 她就那樣靜靜地躺著,像睡著了一般蔬螟。 火紅的嫁衣襯著肌膚如雪此迅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天旧巾,我揣著相機(jī)與錄音耸序,去河邊找鬼。 笑死鲁猩,一個(gè)胖子當(dāng)著我的面吹牛坎怪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播廓握,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼搅窿,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼嘁酿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起男应,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤闹司,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后沐飘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體游桩,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年耐朴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了借卧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筛峭,死狀恐怖铐刘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜒滩,我是刑警寧澤滨达,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站俯艰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锌订。R本人自食惡果不足惜竹握,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辆飘。 院中可真熱鬧啦辐,春花似錦、人聲如沸蜈项。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽紧卒。三九已至侥衬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間跑芳,已是汗流浹背轴总。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留博个,地道東北人怀樟。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像盆佣,于是被迫代替她去往敵國和親往堡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子械荷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一虑灰。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)养葵; ...
    朱森閱讀 3,440評(píng)論 3 44
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,372評(píng)論 8 265
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,516評(píng)論 1 51
  • “復(fù)活!瘩缆!我要打倒你9鼐堋!庸娱!” 沢田綱吉憤怒爆發(fā)大叫着绊,一下子彈起來,他的額頭閃現(xiàn)火焰熟尉,但傷不到他归露,可是他的衣服褲子爆...
    白蘭杰索閱讀 423評(píng)論 0 1
  • “l(fā)et it out,別讓謎底越藏越厚” 今天和朋友出去唱歌吃飯斤儿,看見她們一直拿著手機(jī)在埋頭苦干剧包,我愣了一下,但...
    名偵探大方閱讀 247評(píng)論 0 1