C語言之指針

指針是一種數(shù)據(jù)類型

數(shù)據(jù)類型有哪些特性?

1、作為參數(shù)傳值;

2、作為函數(shù)的返回值;

3、聲明成變量;

為什么要聲明數(shù)據(jù)類型?

為了更加合理的分配內(nèi)存空間。

直接引用

1.如我們在代碼中寫下:char a =10;

2.看上去挺簡單的,但是在程序內(nèi)部是怎么實現(xiàn)的呢?

程序?qū)ψ兞康淖x寫操作,實際是對變量所在的存儲空間進行讀寫操作。所以上面的代碼我們就可以這樣理解:

系統(tǒng)將變量名a轉(zhuǎn)化為變量的存儲地址,根據(jù)地址找到變量a的存儲空間,然后將數(shù)據(jù)10以二進制的形式放到

變量a的存儲空間。

變量 ? ? ? ? ? ? ? ?地址 ? ? ? ? ? ? 存儲內(nèi)容

? a ? ------- ?xxxx ? ? ? ? ?0000 1010

3.通過變量名引用變量,由系統(tǒng)來完成變量名和存儲地址之間的轉(zhuǎn)換,稱為變量的“直接引用”方式

一、什么是指針?

1.“直接引用”是直接通過變量名來讀寫變量。

2.C語言中還有一種“間接引用”的方式 例如:首先將變量a的地址存放在另一個變量中,比如存放在變量b中,然后通過變量b來間接引用變量a,間接讀寫變量a的值。這就是"間接引用"。

3.指針變量占用的空間和它所指向的變量類型無關(guān),只跟編譯器位數(shù)有關(guān)(準確的說只跟尋址方式有關(guān));

變量 ? ?地址 ? ? ?存儲內(nèi)容

?a ? ? ? xxxa ? ??

?b ? ? ? xxxb ? ? ? xxxa

3.總結(jié):用來存放變量地址的變量,就成為“指針變量”。上面的情況b就是一個指針變量,就是指針變量b指向變量a。

二、指針的定義

一般的形式:類型 ?*指針變量名;int *p; ?float *q;

· “*”是一個說明符,用來說明這個變量是一個指針變量,它不屬于變量名的一部分;

· 前面的類型表示指針變量指向的類型,并且只能指向這種類型。

三、指針的初始化

int a; //定義int類型的變量a

int *p = &a;//定義一個指針變量p,將變量a的地址賦值給指針變量p,所以指針變量p指向變量a

指針是用來存地址的?

int *p;?

p = 200;//這是錯誤的

四、指針運算符

1.給指針指向的變量賦值

char a = 10;

printf("修改前,a的值:%d\n", a);

// 指針變量p指向變量a?

char *p = &a;//這個“*”只是用來說明p是個指針變量

// 通過指針變量p間接修改變量a的值

*p = 9;//這個“*”是個指針運算符,這里的*p代表根據(jù)p值(存放的變量a的地址)訪問對應(yīng)的存儲空間,

這里的存儲空間也就是變量a的存儲空間。所以就將9寫入到存儲空間,所以輸出結(jié)果為

printf("修改后,a的值:%d", a); ? 修改前a的值:10 ?修改后a的值:9

2.取出指針所指向變量的值

指針運算符除了可以賦值之外,還可以用于取值

char a = 10;

char *p;

p = &a;

char value = *p;

printf("取出a的值:%d", value); ? ? 取出a的值:10;

3.注意點

在指針變量沒有指向確定的地址前,不要對它的內(nèi)容賦值。

int *p; *p = 10;///這是錯誤的

應(yīng)該在指針變量指向一個確定的變量后再進行賦值。

int i = 6, j;

int *p;

p = &j;

*p = i;

五、指針的用途

現(xiàn)在有個要求:寫一個函數(shù)swap,接收2個整型參數(shù),功能是互換兩個實參的值

void swap(char *v1, char *v2) {

// 中間變量

char temp;

// 取出v1指向的變量的值

temp = *v1;

// 取出v2指向的變量的值,然后賦值給v1指向的變量

*v1 = *v2;

// 賦值給v2指向的變量

*v2 = temp;

}

int main()

{

char a = 10, b = 9;

printf("更換前:a=%d, b=%d\n", a, b);

swap(&a, &b);

printf("更換后:a=%d, b=%d", a, b);

return 0;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容