在C語(yǔ)言的學(xué)習(xí)過(guò)程中,指針是相當(dāng)重要的一部分,學(xué)好指針對(duì)C語(yǔ)言的學(xué)習(xí)有很重要的意義。
指針和內(nèi)存
如果說(shuō)內(nèi)存相當(dāng)于街道,那么地址就相當(dāng)于位于街道中房子的房號(hào)。
一個(gè)字節(jié)(8bit)包含一個(gè)地址。內(nèi)存中每一個(gè)位置都包含一個(gè)獨(dú)一無(wú)二的地址標(biāo)識(shí),而每一個(gè)位置都包含一個(gè)值。
注意:①區(qū)別指針變量的內(nèi)容(即地址)、指針指向變量的內(nèi)容、指針的地址。
②*p分別作為左值和右值時(shí)具有不同的意義
*p放在“=”左邊表示p指向的空間
*p放在“=”右邊表示解引用p
③在對(duì)指針進(jìn)行初始化的時(shí)候有兩種非法情況
如:int *pa;→這是未初始化的指針,這種做法是不行的
*pa=10;
int *pret=fun();→這是個(gè)非法的指針,不能將一個(gè)函數(shù)直接賦給一個(gè)指針變量
*pret=20;
2.指針常量
例:
*((int *)0x0018ff44)=20
其中0x0018ff44是一個(gè)常量,不能直接引用,需強(qiáng)制類(lèi)型轉(zhuǎn)換為一個(gè)整型地址
改為:int a=10;
*((int *)0x0018ff44)=30;
此時(shí)a=30;
3.指針的指針
例:①int *p=NULL;
int **ptr=&p;→二級(jí)指針變量存儲(chǔ)一級(jí)變量的地址
②int a=10;
int *p=&;→想要將a的內(nèi)容變成20,則可以寫(xiě)成*p=20或者**q=20
4.指針運(yùn)算
①對(duì)于一個(gè)指針變量*p,p+n后增加的字節(jié)取決于p的數(shù)據(jù)類(lèi)型,如果是一個(gè)char類(lèi)型的,則增加n個(gè)字節(jié),如果是一個(gè)int類(lèi)型的,則增加n*4個(gè)字節(jié)。
②指針1-指針2之間的元素等于指針1和指針2之間元素的個(gè)數(shù)
③允許指向數(shù)組元素的指針與指向數(shù)組最后一個(gè)元素的指針進(jìn)行比較,但不允許與指向第一個(gè)元素之間的內(nèi)存進(jìn)行比較。
例:用指針實(shí)現(xiàn)一個(gè)冒泡排序的函數(shù)
voidbubble_sort(intarr[],intsz)
{
inti=0;
intj=0;
inttmp=0;
for(i=0;i
{
for(j=0;j<=?sz?-?i?-?1;?j++)??
{
if((*arr+j)>(*arr+j+1))
tmp=*(arr+j);
*(arr+j)=*(arr+j+1);
*(arr+j+1)=tmp;
}
}
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3123瀏覽量
75252 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141671 -
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
71187
原文標(biāo)題:C語(yǔ)言指針的學(xué)習(xí)
文章出處:【微信號(hào):wujianying_danpianji,微信公眾號(hào):?jiǎn)纹瑱C(jī)精講吳鑒鷹】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
C語(yǔ)言指針講解,趕快收藏!
學(xué)習(xí)C語(yǔ)言的用途~
對(duì)PLL電路學(xué)習(xí)和設(shè)計(jì)很重要的參數(shù)有哪些
2.5 C語(yǔ)言入職例程二:指針 精選資料分享
C語(yǔ)言指針電子教程
基于C語(yǔ)言中指針的基本用法解析
C語(yǔ)言編程和指針的學(xué)習(xí)詳細(xì)資料概述

嵌入式開(kāi)發(fā)之C語(yǔ)言的指針

學(xué)習(xí)C語(yǔ)言的目標(biāo)和方法有哪些及C語(yǔ)言的關(guān)鍵字說(shuō)明

學(xué)習(xí)單片機(jī)一定要先學(xué)好C語(yǔ)言再去學(xué)單片機(jī)嗎
2.5 C語(yǔ)言入職例程二:指針

評(píng)論