c++一階指標
定義儲存型別名 資料型別 * 指標變數名;
eg:int *a;//定義了乙個指向整型的指標 a;
指標使用方法
int a,*b;
b=&a;//表明將a的位址賦值給b;
*b=5; //將b指標所指向的位址賦值給5;即等同於a=5;
指標使用前必須賦乙個合法的值
int *a,b;
*a=5;//這種表達方式是錯誤的,因為沒有對a進行初始化,而就進行賦值。
void *a//萬能指標,可以接受任何型別的指標,
int *a;
void *b;
char *c;
b=a;//正確,因為void指標可以接受任何型別的指標
a=b;//錯誤,因為void指標不能直接賦值給其他型別指標 正確寫法應為a=(int *)b;將b強制型別轉換為整形指標,在複製;
c=(char *)b;//正確;
二階指標//二階指標,顧名思義,既為指向指標的指標;
定義:儲存型別 資料型別 ** 指標變數名
eg int **p;//二階指標
#include
using namespace std;
int main()
指標函式傳值
void swap(int *x,int *y){}
int main()
;int (*p)[5]=a;
cout<<"*p[1]="<<*p[1]cout<<"q[1]="}指標函式與函式指標
指標函式//返回值為指標的函式;
定義:型別名 * 函式名(引數列表);
eg:int * max(int *x,int *y);
{returen *x>*y?x:y;
}函式指標//演算法競賽中基本不用,只順便提一下,既為指向函式的指標;
定義:函式型別 (*指標名) (函式形參表);
egint max(int x,int y)
int min(int x,int y)
指標與陣列
c++中陣列名既為乙個位址;故可以賦值給指標變數;
egint a[10];*p;
p=a;//正確;
二維陣列—特殊的二階指標;
int b[10][10];
將二維陣列理解為矩陣;
b為二階指標;
b所指位置為行,稱為行指標;
對b進行一次*運算,便轉換為列指標,從而確定每乙個元素所在位置。
int a[10],*b;
b=a;// 正確,b++;就相當於位址向右移動,b--就相當於位址向左移動,<,>,>=,<=,!=在指標運算中也適用
int a[10][10],**b;
b=a;//這種方式是錯誤的.
int a[10][10],(*b)[10];
b=a;//正確。
int *(*p)[10];//指向指標陣列的陣列指標
char a[20];
int *ptr=(int *)a; ///強制型別轉換並不會改變a的型別
ptr++;
在上例中,指標ptr的型別是int*,它指向的型別是int,它被初始化為指向整型變數a。接下來的第3句中,指標ptr被加了1,編譯器是這樣處理的:它把指標ptr的值加上了sizeof(int),在32位程式中,是被加上了4,因為在32位程式中,int佔4個位元組。由於位址是用位元組做單位的,故ptr所指向的位址由原來的變數a的位址向高位址方向增加了4個位元組。
由於char型別的長度是乙個位元組,所以,原來ptr是指向陣列a的第0號單元開始的四個位元組,此時指向了陣列a中從第4號單元開始的四個位元組。
菜鳥的it之路 起航
之前在知乎上看見怎麼學習資料結構下一位答主的回答,他引用了n.wirth 沃斯 的話 程式 資料結構 演算法。哈,菜鳥無法驗證這句話的正確性有多大 但毫無疑問的是,資料結構應當是一名菜鳥程式狗要重點學習的東西,是不可忽略的一部分。所以,這篇隨筆我將列出接下來一段時間我的資料結構學習計畫 菜鳥的爬行路...
C 之路起航 標準模板庫(queue)
queue fifo佇列 先進先出佇列。優先佇列 對佇列中的元素按優先順序的大小輸出。定義 fifo佇列 queue 資料類性 變數名。優先佇列 priority queue 資料型別 變數名。eg fifo佇列 queueque 定義了乙個名為que的整型的先進先出佇列。優先佇列 priority...
C 之路起航 標準模板庫(deque)
deque 雙端佇列 需要包括標頭檔案 定義 deque 資料型別 變數名 eg dequeque 定義了乙個整型的雙端佇列 基本操作 紅色標識為常用操作 que.assign beg,end 將 beg end 區間中的資料賦值給que。que.assign n,elem 將n個elem的拷貝賦值...