c 中與指標相關一些基本知識

2021-06-23 00:44:21 字數 2452 閱讀 1649

(1)我們知道變數的定義基本形式是:型別說明符+乙個或者多個識別符號列表(以逗號隔開)+「;」結束。例如:

int a;

int mouth,day,year;

double price;   等等。

(2)那麼指標的定義呢?在c++語言中,使用「*」符號把乙個標示符宣告為指標,例如:

int *p1,*p2;

string *pstring;

double *dp;

在有些時候你會看到指標的另一中宣告(用空格將符號*和後面的標示符分隔開來): string* ps;(把ps定義為乙個指向string型別的指標)。這是合法的。但是這樣容易產生一種誤解。在乙個宣告語句擁有多個識別符號的情況下:string* ps1,ps2;實際上只把ps1定義為指標,而ps2不是,只是乙個普通的string型別物件而已。所以習慣用這種方式的,得注意這點。

我們知道,對於乙個指標的有效狀態有三種:1、儲存乙個特定物件的位址,2、指向某個物件後面的另乙個物件,3、0值(若指標儲存0值,表面它不指向任何物件)。未初始化的指標是無效的,直到給指標賦值後,才能使用它。

int  *pi=0;表示pi不指向任何物件。

int *pi1=&val;pi1指向物件val

pi1=0; pi1不指向任何物件

int  *pi2=null;     等價於 int *pi=0;(注:編譯時,會自動將null 換成0)

另外,c++提供了一種特殊的指標型別 void*,它可以儲存任何型別物件的位址。void* 表明該指標與一位址相關,但不清楚儲存在此位址上的物件的型別。所以,其支援的操作也有限:1、與另乙個指標進行比較;

2、向函式傳遞void* 指標或從函式返回void*指標

3、給另乙個void*指標賦值、

不允許使用void*指標操作它所指的物件。

(3)指向指標的指標

指標本身也是可用指標指向的記憶體物件。指標占用記憶體空間存放其值,因此指標的儲存位址可存放在指標中。

int **p=&val;   ——>  乙個指向指標的指標,它指向的指標是指向乙個整形數。

(4)指標與引用的比較

雖然引用(reference)和指標都可以間接訪問另乙個值,但它們有兩個重要的區別。第乙個區別,引用總是指向某個物件:定義引用時沒用初始化是錯誤的;第二個區別,賦值行為的差異:給引用複製修改的是該引用所關聯的物件的值,而並不是應用與另乙個物件的關聯。引用一經初始化,就始終指向同乙個特定的物件。

int &r1=val1,&r2=val2;

r1=r2;   這個賦值操作修改了r1引用的值val1物件,而並非引用本身。賦值後,這兩個引用還是分別指向原來關聯的物件,此時這兩個物件的值相等。

(5)指向陣列元素的指標

int a[10];     //定義乙個整形陣列a,它有10個元素

int *p;   //定義乙個基型別為整形的指標變數p

p=&a[0];    ------p=a;    (注:這兩個是等價的)在c++中,陣列名代表陣列中第乙個元素(序號為0的元素)的位址。

(6)指向陣列的指標

int (*p) [n];  //表示指標變數p指向的是含有n個整形元素的一維陣列。

(7)指標陣列

如果乙個陣列,其元素均為指標型別資料,該陣列稱為指標陣列,也就是說,指標陣列中的每乙個元素相當於乙個指標變數,它的值都是位址。一維指標陣列的定義形式為:

型別名 *陣列名[陣列長度];

例如:  int *p[4];

可以用指標陣列中各個元素分別指向若干個字串,使字串處理更加方便靈活。

(8)函式的指標

指標變數也可以指向乙個函式。乙個函式在編譯的時候被分配乙個入口位址。這個函式入口位址就稱為函式的指標。可以用乙個指標變數指向函式,然後通過該指標變數呼叫此函式。

定義指向函式的指標變數的方法是:函式型別 (*指標變數名) (函式形參表);

int (*p)(int ,int );  //  int 表示指標變數p指向的函式的型別

//(int ,int )中 int 表示p指向的函式的形參型別

//p 表示指向函式的指標變數

(9)返回指標值的函式

乙個函式可以返回乙個整形值、字元值等等,也可以返回乙個指標型的資料,即位址。返回指標值的函式簡稱為指標函式

定義形式:

型別名 *函式名(引數列表);

int  *max(int x, int y);

C語言指標與陣列的一些基本知識

我還是乙個初學者,今天看了一天的書,總結了如下知識點。指標與陣列 int p p a p 1 指標 指標就是乙個位址,指標變數是存放位址的變數,指標變數的值就是指標p指向那個元素的位址。p a 把a的位址賦給指標變數p 指標變數p的值就是a的位址,p指向a printf d p 輸出指標變數p所指向...

framebuffer 一些基本知識

horizontal回掃和vertical回掃是crt引入的概念,電子束從左向右畫水平線,回到下一行行首繼續下一行掃瞄,直到螢幕最下一行,然後回到螢幕上方繼續下一幀掃瞄。水平回掃 電子束從上一行尾移動到下一行起始點需要的時間 幀回掃 電子束從螢幕下方移動到螢幕上方所需的時間 crt的重新整理屏率是怎...

C語言一些基本知識整理

c語言中,資料型別分為基本資料型別 構造資料型別 指標型別和void型別4種型別。計算機的記憶體結構是以位元組為單位進行儲存分配的,每個位元組都用乙個實體地址來唯一標識,系統根據所定義的變數的資料型別為其分配相應的儲存空間。對於32位機,字元型佔1個位元組,基本整型佔4個位元組,短整型佔2個位元組,...