c 之路起航 指標

2022-08-16 03:45:12 字數 1803 閱讀 2166

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的拷貝賦值...