色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 學習筆記 > 嵌入式學習筆記:指針和指針變量的區別(指針知識點大全)

嵌入式學習筆記:指針和指針變量的區別(指針知識點大全) 時間:2018-09-13      來源:未知

1.指針和地址

指針:指針在c語言中屬于一種類型,這種類型對應的變量專門用于存儲地址

地址:存儲單元的編號,用于區分不同的存儲單元,存儲在內存中的每個數據都會有地址

例如:char ch;//分配一個字節 short a;//分配兩個字節

注意:地址是一個常量

2.直接引用與間接引用

直接引用:表示通過變量名來引用(對變量讀與寫)

間接引用:通過指針類型變量來引用,即將變量地址存儲到指針變量中

√:使用*來表示指針類型

定義指針類型的變量:< 類型修飾符> * 變量名

例如:

理解:P是地址;*P是一個值 int*p是一個地址

注意:任何類型必須定義變量之后才會分配空間

區分:

一個指針變量所占用的空間,和操作的地址總線(硬件)的寬度有關系,一般為32位/64位,操作系統本身的能夠一次處理的數據大小有關

3.指針變量的初始化

指針變量在使用時,一定要指向一個確定的存儲空間(賦值或者初始化),否則指向的位置是隨機的(稱為“野指針”)。如果不確定指針類型變量所指向的空間,可以初始化為NULL,如:int *p=NULL

注意:int *p=1000(錯誤) 在有操作系統的情況下,不能給指針初始化一個常量

補充:如果不確定指針類型變量所指向的空間,可以初始化為NULL,對指向NULL的指針進行間接運算會產生"段錯誤",解決方法如下:

Segmentation fault (core dumped) //出現段錯誤

Gdb //來確定是第幾行

gdb a.out

執行 r 命令

Program received signal SIGSEGV, Segmentation fault.

0x08048409 in main () at 03pointer.c:7

7 *p = 300;

(gdb) q

4指針變量作為函數參數

使用指針類型的變量作為函數的形式參數,與普通變量的語法相同,寫成指針類型即可

例如:void swapy(int *pa,int *pb);

使用的指針類型的變量作為函數參數,實際參數需要指定為地址或者其他的指針變量,同時,形式參數也分為輸入的形式參數與輸出的形式參數

輸入的形式參數,一般將實際參數的值傳遞給形式參數

輸出的形式參數,一般通過指針進行間接引用,可以返回調用這多個值

作用:主要用于解決:return 只能返回一個值的問題

具體例子(常用):output 函數的應用

 

5指針與一維數組

數組及其元素同樣占有存儲單元,都有相應的地址,所以指針即可以指向數組的元素,也可以指向數組

區別:數組名與數組首地址的區別

作用:

每個形式參數都需要分配空間,而且是獨立的空間

如果將數組整體進行傳遞時,產生一個形式參數數組,非常浪費空間與時間

將數組的首元素的地址進行傳遞

6.指針運算

當指針指向一段連續內存空間某一個地址時,比如指向數組元素時,就可以進行指針元素,一 般可以進行如下的運算:

自增/自減運算:進行加1運算與減1運算

求差值:兩個指針變量進行減法運算,前提是指向同一段內存空間

賦值:將一個地址賦值給一個指針

定義一個一維數組與指針變量,并進行指針運算,包括++ / -- ,指針-指針,指針-數字

注意: int *ptr++ 先取值后++;

例子:Int i; int p=&I;

補充:(技巧性)追逐法確定第一、第二個最大值

7.指針與二維數組

C語言把二維數組看作是一維數組的集合,即二維數組是每一個元素為一維數組的特殊一維 數組,即二維數組的元素類型為一維數組

理解:二維數組的首地址---一維數組的首地址---一維數組的元素的地址---元素的值

一個*或[ ]降一級 一個&升一級

區分:

注:圖2最后一行錯誤

8.指向一維數組的指針

指針變量存儲的地址對應的變量的類型一般使用類型修飾符來確定

指針與二維數組的結合,一般為了方便操作行,就是需要使用指向一維數組的指針

指向一維數組的指針,用于存儲數組的地址(不是數組元素的地址)

例如:

9.指針數組

指針數組主要用于存儲地址的集合,每個元素都是存儲的一個地址

應用:

補充:(函數性)strcmp 用于字符串比較

補充:(技巧性)冒泡排序法

字符串的排序:

10.指向指針的指針

存儲指針變量的地址,使用指向指針的指針

具體例子:

11. void *類型的指針

int *p ;//計算偏移 +1 偏移4個字節,在進行間接引用運算(尋址運算),操作4個字節

char *p ;//計算偏移 +1 偏移1個字節,在進行間接引用運算(尋址運算),操作1個字節

void *q ;//表示無類型的指針,可以存儲任何類型的地址,存儲時轉換成void *

void *的指針不允許進行間接引用操作,因為不知道會操作幾個字節

作用:在函數中作為形式參數時,可以提高對應的通用性

int *p = (int *)q;//指針類型的強制轉換

具體例子:

上一篇:嵌入式學習筆記:函數入門知識總結

下一篇:嵌入式學習筆記:arm按鍵中斷實現流程

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 成人做爰高潮片免费看古代小说 | 无码精品人妻一区二区三区九里奈 | voyeur精品偷窥 | 全免费一级毛片免费看 | 无套内谢少妇毛片A片软件 自在自线亚洲а∨天堂在线 | 无码国产精品一区二区免费VR | 韩国免费a级毛片久久 | 一个人看的www高清免费资源 | 99爱国产精品免费高清在线 | 久久天天躁夜夜躁狠狠I女人 | www.高潮原创av | 欧美资源在线观看 | 性色a| 欧美一级毛片免费网站 | 69精品人人人人人人人人人 | 美国理论片a级在线观看 | 在线观看国产丝袜控网站 | 最新免费av网站 | 最新一区二区三区 | 国产一二三四在线 | ASS新版ASS毛茸茸PICS | 99久久久成人国产精品免费 | 四虎国产精品成人免费久久 | 337P大尺度啪啪人体 | 日韩av网址一卡二卡 | 成年美女黄网站色大全 | 日韩精品亚洲人成在线 | JZZIJZZIJ在线观看亚洲熟妇 | 老师洗澡让我吃她胸视频 | 日本女优免费一区 | 久久精品国产亚洲AV久 | 三年片在线观看免费观看大全动漫 | 国产乱精品一区二区三区 | 激情综合色五月六月婷婷 | 九热爱视频精品视频 | 久久久久亚洲av无码专区蜜芽 | 亚洲成a人片在线观看视频 欧洲日韩在线 | 亚洲成色WWW久久网站夜月 | 亚洲最大AV网站在线观看 | 日本羞羞裸色私人影院 | 久久人人做人人妻人人玩精品hd |