在C語言的學習過程中,指針是相當重要的一部分,學好指針對C語言的學習有很重要的意義。
指針和內存
如果說內存相當于街道,那么地址就相當于位于街道中房子的房號。
一個字節(8bit)包含一個地址。內存中每一個位置都包含一個獨一無二的地址標識,而每一個位置都包含一個值。
注意:①區別指針變量的內容(即地址)、指針指向變量的內容、指針的地址。
②*p分別作為左值和右值時具有不同的意義
*p放在“=”左邊表示p指向的空間
*p放在“=”右邊表示解引用p
③在對指針進行初始化的時候有兩種非法情況
如:int *pa;→這是未初始化的指針,這種做法是不行的
*pa=10;
int *pret=fun();→這是個非法的指針,不能將一個函數直接賦給一個指針變量
*pret=20;
2.指針常量
例:
*((int *)0x0018ff44)=20
其中0x0018ff44是一個常量,不能直接引用,需強制類型轉換為一個整型地址
改為:int a=10;
*((int *)0x0018ff44)=30;
此時a=30;
3.指針的指針
例:①int *p=NULL;
int **ptr=&p;→二級指針變量存儲一級變量的地址
②int a=10;
int *p=&;→想要將a的內容變成20,則可以寫成*p=20或者**q=20
4.指針運算
①對于一個指針變量*p,p+n后增加的字節取決于p的數據類型,如果是一個char類型的,則增加n個字節,如果是一個int類型的,則增加n*4個字節。
②指針1-指針2之間的元素等于指針1和指針2之間元素的個數
③允許指向數組元素的指針與指向數組最后一個元素的指針進行比較,但不允許與指向第一個元素之間的內存進行比較。
例:用指針實現一個冒泡排序的函數
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;
}
}
-
內存
+關注
關注
8文章
3111瀏覽量
75025 -
C語言
+關注
關注
180文章
7630瀏覽量
140552 -
指針
+關注
關注
1文章
484瀏覽量
71037
原文標題:C語言指針的學習
文章出處:【微信號:wujianying_danpianji,微信公眾號:單片機精講吳鑒鷹】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
學習C語言的用途~
基于C語言中指針的基本用法解析
C語言編程和指針的學習詳細資料概述

學習C語言的目標和方法有哪些及C語言的關鍵字說明

評論