c語言指標定義和使用

2021-09-29 07:21:02 字數 2305 閱讀 3490

資料記憶體中的位址也稱為指標,如果乙個變數儲存了乙份資料的指標,我們就稱它為指標變數。

定義指標變數

定義指標變數與定義普通變數非常相似,不過要在變數名前加星號 * ,格式為:

datatype *name ; 或者dataype *name = value;

* 表示乙個指標變數,datatype表示該指標變數所指向的資料的型別。例如:

int *p1;

p1 是乙個指向int 型別資料的指標變數,至於p1究竟指向哪乙份資料,應該賦予它的值決定。再如:

int a = 100; 

int *p_a = &a;

在定義指標變數p_a 的同時對他進行初始化,並將變數a的位址賦予它,此時p_a就指向了a。值得注意的是,p_a需要的乙個位址,a前面必須要加取位址&,否則是不對的;

和普通變數一樣,指標也可以被多次寫入,只要你想,隨時能夠改變指標變數的值:

//定義普通變數

float a = 99.5,b = 10.6;

char c = '@' ,d = '#';

//定義指標變數

float *p1 = &a;

chat *p2 = &c;

//修改指標變數

p1 = &b;

p2 = &d;

* 是乙個特殊符號,表明乙個變數是乙個指標,定義p1/p2必須帶 * ,而給p1.p2賦值時,因為已經知道它時乙個指標變數,就沒必要多此一舉再帶上 * 號,後面可以像使用普通變數一樣使用指標。

*pointer;
#include int main()

使用指標可以間接獲取資料,使用變數名時直接獲取資料,前者比後者的代價要高

指標除可以獲取記憶體的資料,也可以修改,也可以修記憶體上的資料,例如:

#include int main()

執行的結果全為99;

*p代表的是a中的資料,它等價於a,可以將另外乙份資料賦值給它,也可以將它賦值給另外乙個變數

* 在不同的場景下有不同的作用:*可以用在指標變數的定義中,表明是乙個指標變數,以和普通變數區分開;使用指標變數時在前面加 * 表示獲取指標指向的資料,或者說表示的是指標指向的資料本身

也就是說,定義指標變數時的 * 和使用指標時的 * 意義完全不同,例如以下**:

int *p = &a; //指明p是乙個指標變數

*p = 100; // 用來獲取指標指向的變數

需要注意的是,給指標變數本身賦值時不能加 * , 修改上面的**:

int *p;

p = &a; //不能再p的前面加 *

*p = 100;

int x,y,*px = &x,*py = &y;

y = *px + 5; //表示把x的內容加5並賦值給y,*px + 5 相當於(*px) + 5

y = ++*px; // px的內容加上1之後賦值給y,++*px相當於++(*px)

y = *px++; // 相當於 y = (*px)++

py = py; // 把乙個指標的值賦給另乙個指標

假設有乙個 int 型別的變數a,pa是指向它的指標,那麼*&a 和 &*pa分別是什麼意思呢?

*&a可以理解為*(&a),&a表示取變數a的位址(等價於pa),*(&a)表示取這個位址上的資料(等價於*a),繞來繞去,又回到了原點,*&a仍然等價於a.

&*pa可以理解為&(*pa),*pa表示取得pa指向的資料(等價於a),&(*pa)表示資料的位址(等價於&a),所以&*pa等價於pa。

星號的主要三種用途

1.表達乘法

2.表示定義乙個指標的變數,以和普通變數區分開,例如 int a = 100;int *p = &a;

3.表示獲取指標指向的資料,是一種間接操作,例如 int a,b,*p= &a;*p = 100;b = *p; 

C語言程式設計 指標變數的定義和使用

指標變數的定義和使用 int 變數型別 整形指標 p null 初始值 null恆等於0 p 在指標變數定義時 只起修飾作用,告訴編譯器p是指標 p 在指標變數取值時 訪問記憶體位址為p的儲存區域 指標變數所佔位元組數只與作業系統有關 取值運算子 根據記憶體位址取內容或者取資料 取址運算值 p a ...

c語言中函式指標的定義和使用

1 定義 函式返回值型別 指標變數名 函式引數列表 例如 函式指標 這一資料型別 int int,int 定義變數int func int,int 模擬 定義乙個指標變數 int p 另外,還可以使用typedef來定義函式指標 例如 typedef void func void 將函式指標 voi...

c語言 指標定義

指標 精髓 指標 位址 通過變數名訪問變數,稱為直接儲存 通過位址 指標 訪問變數,稱為間接儲存 1.定義指標變數 基型別 指標變數名 說明 基型別可以是任意資料型別 說明其後的變數名為指標變數名 指標變數名是任意合法的識別符號 例如int pointer 1 2.指標變數賦值 1 先定義後賦值 i...