C++學(xué)習(xí)3

姓名:張立斐 ? 學(xué)號(hào):19020700001? ?學(xué)院:電子工程學(xué)院?

轉(zhuǎn)自:https://blog.csdn.net/lvliang2017232003/article/details/85341687

【嵌牛導(dǎo)讀】C++學(xué)習(xí)

【嵌牛鼻子】C++

【嵌牛提問(wèn)】如何學(xué)習(xí)C++?

【嵌牛正文】

指針前面的*運(yùn)算符稱為間接值或解除引用運(yùn)算符。

1.C++中指針聲明:int*? ptr; //強(qiáng)調(diào)int*是一種類型——指向int的指針。 ptr本身是一個(gè)指針

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int*? p1,p2;? //聲明一個(gè)指針p1和一個(gè)int變量p2.

2.**指針的初始化:(不是初始化它指向的值)? ? int h=5;? int* pt= &h;【指針的初始化非常重要】(delete pt; //不允許)

? ? 如下語(yǔ)句:long *fellow;? *fellow=23323; //會(huì)產(chǎn)生bug,無(wú)法確定fellow指向哪里,指向的可能不是儲(chǔ)存23323的地方

3. 指針不是整型 : int*? pt; pt=0xB8000000; //不合法

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int*? pt; pt=(int *) 0xB8000000;? //合法

4.在C中用庫(kù)函數(shù)malloc()來(lái)分配內(nèi)存,在C++也可以這樣,還有種方法——new運(yùn)算符。new和delete要配對(duì)使用

? int * pn=new int;? ....delete pn; //用delete來(lái)釋放new分配的內(nèi)存

double * pd=new double; *pd=10000001.0;? //size of pd? =4 , size of *pd=8, 指針的長(zhǎng)度是4個(gè)字節(jié),與所指的數(shù)據(jù)類型無(wú)關(guān)

5.使用new創(chuàng)建動(dòng)態(tài)數(shù)組:

double * p3=new double [3];? //創(chuàng)建包含3個(gè)doble元素的數(shù)組,指針p3指向內(nèi)存中的第一個(gè)元素

p3[0]=0.2;? p3[1]=0.5;? p3[2]=0.8;? //指針訪問(wèn)數(shù)組中元素

p3=p3+1; cout<<p3[0]<<" "<<p3[1];? //輸出結(jié)果是p3[0]是0.5,p3[1]是0.8。p3+1導(dǎo)致指針指向第2個(gè)元素。

p3=p3-1; delete [] p3;? //在釋放指針時(shí),應(yīng)減1,指向原來(lái)的值。 釋放數(shù)組內(nèi)存時(shí)要加[]

6.指針變量加1后,增加的量等于它指向的類型的字節(jié)數(shù)。

多數(shù)情況, C++將數(shù)組名解釋為數(shù)組第1個(gè)元素的地址。

使用數(shù)組表示法時(shí),C++執(zhí)行下面的轉(zhuǎn)換: array[i] --> *(array+i)

使用的是指針,而不是數(shù)組名是,C++也執(zhí)行轉(zhuǎn)換:pt[i]--> *(pt+i)

7.對(duì)數(shù)組應(yīng)用sizeof得到的是數(shù)組長(zhǎng)度; 對(duì)指針應(yīng)用sizeof得到的是指針長(zhǎng)度(=4);

8. 數(shù)組的地址

short tell[10];?

cout<<tell<<endl;? //顯示&tell[0]的結(jié)果,是一個(gè)2字節(jié)的內(nèi)存塊地址

cout<<&tell<<endl; //對(duì)數(shù)組名取地址(&)顯示整個(gè)數(shù)組的地址,是一個(gè)20字節(jié)的內(nèi)存塊地址

//tell是一個(gè)short指針 *short

//&tell是一個(gè)指向包含20個(gè)元素的short數(shù)組的指針 short(*)[20]

short (*pas)[20]=&tell; //pas指針指向含20個(gè)short元素的數(shù)組

//*pas等價(jià)于tell, (*pas)[0]=tell[0];

9.如果給cout提供一個(gè)指針,它將打印地址,如果指針類型為char* ,則cout將顯示指向的字符。

? 如果要顯示字符串地址,則必須強(qiáng)制轉(zhuǎn)換(int *) ps。

char animal[20]="fox";? ? ? ? char *ps;

ps=animal;? cout<<ps<<" at "<<(int *) ps<<endl; //ps是一個(gè)指針,但顯示字符串,(int *) ps顯示字符串地址

10.通過(guò)使用new和strcpy()來(lái)獲取字符串?dāng)?shù)組的副本

? ps=new char[strlen(animal)+1];?

? strcpy(ps,animal); //不可直接賦值,ps=animal,只想將地址復(fù)制給ps,兩個(gè)指針指向相同的內(nèi)存單元和字符串,沒(méi)有復(fù)制字符串。

11.使用new創(chuàng)建動(dòng)態(tài)結(jié)構(gòu)時(shí),指針pa表示指向結(jié)構(gòu)的指針,訪問(wèn)結(jié)構(gòu)成員的方式:(1)pa->name;(2)? (* pa).name [name為結(jié)構(gòu)成員]

12.

struct Years

{

int year;

int month;

};

Years y1,y2,y3; //創(chuàng)建結(jié)構(gòu)變量

Years ys[3];? ? //創(chuàng)建結(jié)構(gòu)數(shù)組

const Years * apy[3]={&y1,&y2,&y3};? //創(chuàng)建指針數(shù)組

//創(chuàng)建上述指針數(shù)組的指針,兩種方式

const Years ** ppya=apy;? //方法1

auto ppyb=apy;? ? ? ? ? ? //方法2,方便一點(diǎn),不易搞混

//訪問(wèn)

std::cout<<(*ppya)->year<<std::endl;

std::cout<<(*(ppyb+1))->yrar<<std::endl;

13.模板類 vector類(動(dòng)態(tài)數(shù)組) :應(yīng)用是加頭文件#include <vector>;

using spacename std;? ? vector<int>? vi(n); //名為vi的vector對(duì)象,可存儲(chǔ)n個(gè)int類型的元素,n可為整型常量,也可為整型變量

14.模板類array類? (C++11)應(yīng)用是加頭文件#include <array>; 與數(shù)組一樣,array對(duì)象長(zhǎng)度固定。

using spacename std;? ? array<int,5>? ai; //名為ai的array對(duì)象,可存儲(chǔ)n個(gè)int類型的元素,n為整型常量.,這里n=5;

15. 數(shù)組、array對(duì)象、vector對(duì)象都可以用標(biāo)準(zhǔn)數(shù)組表示法來(lái)訪問(wèn)每個(gè)元素。

array對(duì)象可以直接賦值給另一個(gè)array對(duì)象,而對(duì)于數(shù)組,必須逐元素復(fù)制數(shù)據(jù)。

array對(duì)象和數(shù)組存儲(chǔ)在相同的內(nèi)存區(qū)域(即棧)中; vector對(duì)象存儲(chǔ)在另一個(gè)區(qū)域(自由存儲(chǔ)區(qū)或堆)中。

————————————————

版權(quán)聲明:本文為CSDN博主「lvliang2229」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/lvliang2017232003/article/details/85341687

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 姓名:張立斐 學(xué)號(hào):19020700001 學(xué)院:電子工程學(xué)院 轉(zhuǎn)自:https://blog.csdn.net...
    zlf閱讀 328評(píng)論 0 0
  • 2018年8月17日 22:14:16 title: C++PrimerPlus讀書筆記typora-root-u...
    _layty閱讀 257評(píng)論 0 0
  • CPP_Basic_Summary_0.4 1、編譯器不會(huì)檢查數(shù)組下標(biāo)是否有效2、sizeof用于數(shù)組名,則計(jì)算整...
    貼墻上的咖啡閱讀 707評(píng)論 0 1
  • 技術(shù)交流QQ群:1027579432,歡迎你的加入! 1.Cpp中的指針 每個(gè)變量都有一個(gè)內(nèi)存位置,每一個(gè)內(nèi)存位置...
    CurryCoder閱讀 2,773評(píng)論 0 1
  • ● 說(shuō)一下static關(guān)鍵字的作用 參考回答: 1. 全局靜態(tài)變量 在全局變量前加上關(guān)鍵字static,全局變量就...
    書山壓力閱讀 811評(píng)論 0 1

友情鏈接更多精彩內(nèi)容