我的隨行筆記3 C++ Primer Plus 3--指標
指標前面的*運算子稱為間接值或解除引用運算子。
1.C++中指標宣告:int* ptr; //強調int*是一種型別——指向int的指標。 ptr本身是一個指標
int* p1,p2; //宣告一個指標p1和一個int變數p2.
2.**指標的初始化:(不是初始化它指向的值) int h=5; int* pt= &h;【指標的初始化非常重要】(delete pt; //不允許)
如下語句:long *fellow; *fellow=23323; //會產生bug,無法確定fellow指向哪裡,指向的可能不是儲存23323的地方
3. 指標不是整型 : int* pt; pt=0xB8000000; //不合法
int* pt; pt=(int *) 0xB8000000; //合法
4.在C中用庫函式malloc()來分配記憶體,在C++也可以這樣,還有種方法——new運算子。new和delete要配對使用
int * pn=new int; ....delete pn; //用delete來釋放new分配的記憶體
double * pd=new double; *pd=10000001.0; //size of pd =4 , size of *pd=8, 指標的長度是4個位元組,與所指的資料型別無關
5.使用new建立動態陣列:
double * p3=new double [3]; //建立包含3個doble元素的陣列,指標p3指向記憶體中的第一個元素
p3[0]=0.2; p3[1]=0.5; p3[2]=0.8; //指標訪問陣列中元素
p3=p3+1; cout<<p3[0]<<" "<<p3[1]; //輸出結果是p3[0]是0.5,p3[1]是0.8。p3+1導致指標指向第2個元素。
p3=p3-1; delete [] p3; //在釋放指標時,應減1,指向原來的值。 釋放陣列記憶體時要加[]
6.指標變數加1後,增加的量等於它指向的型別的位元組數。
多數情況, C++將陣列名解釋為陣列第1個元素的地址。
使用陣列表示法時,C++執行下面的轉換: array[i] --> *(array+i)
使用的是指標,而不是陣列名是,C++也執行轉換:pt[i]--> *(pt+i)
7.對陣列應用sizeof得到的是陣列長度; 對指標應用sizeof得到的是指標長度(=4);
8. 陣列的地址
short tell[10];
cout<<tell<<endl; //顯示&tell[0]的結果,是一個2位元組的記憶體塊地址
cout<<&tell<<endl; //對陣列名取地址(&)顯示整個陣列的地址,是一個20位元組的記憶體塊地址
//tell是一個short指標 *short
//&tell是一個指向包含20個元素的short陣列的指標 short(*)[20]
short (*pas)[20]=&tell; //pas指標指向含20個short元素的陣列
//*pas等價於tell, (*pas)[0]=tell[0];
9.如果給cout提供一個指標,它將列印地址,如果指標型別為char* ,則cout將顯示指向的字元。
如果要顯示字串地址,則必須強制轉換(int *) ps。
char animal[20]="fox"; char *ps;
ps=animal; cout<<ps<<" at "<<(int *) ps<<endl; //ps是一個指標,但顯示字串,(int *) ps顯示字串地址
10.透過使用new和strcpy()來獲取字串陣列的副本
ps=new char[strlen(animal)+1];
strcpy(ps,animal); //不可直接賦值,ps=animal,只想將地址複製給ps,兩個指標指向相同的記憶體單元和字串,沒有複製字串。
11.使用new建立動態結構時,指標pa表示指向結構的指標,訪問結構成員的方式:(1)pa->name;(2) (* pa).name [name為結構成員]
12.
struct Years
{
int year;
int month;
};
Years y1,y2,y3; //建立結構變數
Years ys[3]; //建立結構陣列
const Years * apy[3]={&y1,&y2,&y3}; //建立指標陣列
//建立上述指標陣列的指標,兩種方式
const Years ** ppya=apy; //方法1
auto ppyb=apy; //方法2,方便一點,不易搞混
//訪問
std::cout<<(*ppya)->year<<std::endl;
std::cout<<(*(ppyb+1))->yrar<<std::endl;
13.模板類 vector類(動態陣列) :應用是加標頭檔案#include <vector>;
using spacename std; vector<int> vi(n); //名為vi的vector物件,可儲存n個int型別的元素,n可為整型常量,也可為整型變數
14.模板類array類 (C++11)應用是加標頭檔案#include <array>; 與陣列一樣,array物件長度固定。
using spacename std; array<int,5> ai; //名為ai的array物件,可儲存n個int型別的元素,n為整型常量.,這裡n=5;
15. 陣列、array物件、vector物件都可以用標準陣列表示法來訪問每個元素。
array物件可以直接賦值給另一個array物件,而對於陣列,必須逐元素複製資料。
array物件和陣列儲存在相同的記憶體區域(即棧)中; vector物件儲存在另一個區域(自由儲存區或堆)中。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30239065/viewspace-2715092/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 我的隨行筆記2 C++ Primer Plus筆記C++
- 我的隨行筆記11 C++ Primer Plus筆記C++
- 我的隨行筆記7 C++ Primer Plus筆記C++
- 我的隨行筆記10 C++ Primer Plus筆記C++
- 我的隨行筆記9 C++ Primer Plus筆記C++
- 我的隨行筆記8 C++ Primer Plus筆記C++
- 我的隨行筆記6 C++ Primer Plus筆記C++
- 我的隨行筆記5 C++ Primer Plus筆記C++
- 我的隨行筆記4 C++ Primer Plus筆記C++
- C++ Primer Plus隨記1C++
- C++ Primer Plus 隨記(第八章)C++
- C++ primer Plus學習筆記(第二章)C++筆記
- 《C++ Primer Plus》15.1 友元 學習筆記C++筆記
- C++筆記(11) 智慧指標C++筆記指標
- C++ Primer筆記C++筆記
- C++ primer 筆記C++筆記
- 《C++ Primer Plus》16.1 string類 學習筆記C++筆記
- C++ Primer Plus第6版18個重點筆記C++筆記
- C++中的可見性 指標 筆記C++指標筆記
- 【C++ Primer Plus】學習筆記--第10章 物件和類C++筆記物件
- 《C++ Primer》學習筆記(八):標準 IO 庫C++筆記
- C++ Primer Plus(四)C++
- C++ Primer Plus(三)C++
- C++ Primer Plus(一)C++
- 《C++ Primer》筆記-#include,#ifndefC++筆記
- python筆記3--進階資源Python筆記
- C++ Primer Plus 第四章 複合型別 學習筆記C++型別筆記
- 指標學習筆記指標筆記
- 程式設計師的數學筆記3--迭代法程式設計師筆記
- C++學習筆記基礎篇15——地址和指標C++筆記指標
- Nginx學習筆記3--(極客時間-陶輝)Nginx筆記
- golang工作筆記(一)指標Golang筆記指標
- iOS指標學習筆記iOS指標筆記
- 雙指標維護筆記指標筆記
- C語言指標筆記C語言指標筆記
- c++筆記3C++筆記
- c++ primer 第二章閱讀筆記C++筆記
- C++ this 指標C++指標