在C語言的學(xué)習(xí)過程中,指針是相當(dāng)重要的一部分,學(xué)好指針對C語言的學(xué)習(xí)有很重要的意義。
指針和內(nèi)存
如果說內(nèi)存相當(dāng)于街道,那么地址就相當(dāng)于位于街道中房子的房號。
一個(gè)字節(jié)(8bit)包含一個(gè)地址。內(nèi)存中每一個(gè)位置都包含一個(gè)獨(dú)一無二的地址標(biāo)識,而每一個(gè)位置都包含一個(gè)值。
注意:①區(qū)別指針變量的內(nèi)容(即地址)、指針指向變量的內(nèi)容、指針的地址。
②*p分別作為左值和右值時(shí)具有不同的意義
*p放在“=”左邊表示p指向的空間
*p放在“=”右邊表示解引用p
③在對指針進(jìn)行初始化的時(shí)候有兩種非法情況
如:int *pa;→這是未初始化的指針,這種做法是不行的
*pa=10;
int *pret=fun();→這是個(gè)非法的指針,不能將一個(gè)函數(shù)直接賦給一個(gè)指針變量
*pret=20;
2.指針常量
例:
*((int *)0x0018ff44)=20
其中0x0018ff44是一個(gè)常量,不能直接引用,需強(qiáng)制類型轉(zhuǎn)換為一個(gè)整型地址
改為:int a=10;
*((int *)0x0018ff44)=30;
此時(shí)a=30;
3.指針的指針
例:①int *p=NULL;
int **ptr=&p;→二級指針變量存儲一級變量的地址
②int a=10;
int *p=&;→想要將a的內(nèi)容變成20,則可以寫成*p=20或者**q=20
4.指針運(yùn)算
①對于一個(gè)指針變量*p,p+n后增加的字節(jié)取決于p的數(shù)據(jù)類型,如果是一個(gè)char類型的,則增加n個(gè)字節(jié),如果是一個(gè)int類型的,則增加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文章
3125瀏覽量
75270 -
C語言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141766 -
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
71197
原文標(biāo)題:C語言指針的學(xué)習(xí)
文章出處:【微信號:wujianying_danpianji,微信公眾號:單片機(jī)精講吳鑒鷹】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
學(xué)習(xí)C語言的用途~
對PLL電路學(xué)習(xí)和設(shè)計(jì)很重要的參數(shù)有哪些
基于C語言中指針的基本用法解析
C語言編程和指針的學(xué)習(xí)詳細(xì)資料概述

評論