很多初學者會發出這樣的感慨:我C語言中其它的知識都學得可以,唯獨指針搞不懂。如果是這樣,我可以很負責的告訴你,對于這門編程語言,你等于是沒學。所以學好指針對于初學者是非常重要的。或許你會覺得它有點抽象,但是當你徹底理解了指針的含義,你會發現指針用起來特別方便。
今天我就很膚淺的說一下指針的幾種用法:
1、指針指向變量:
下面有這樣一個代碼塊:
int main()
{int a=10;int b=15;test(a,b);printf("a=%d,b=%d ",a,b);}
void test(int x,int y)
{int tmp;tmp=x;x=y;y=tmp;}
最后輸出的結果還是a=10,b=15。因為在函數調用時,實參和形參之間只是值傳遞。但我們使用指針結果就不一樣了,如:
int main()
{int a=10;int b=15;test(&a,&b);printf("a=%d,b=%d ",a,b);return 0;}
void test(int * x,int *y)
{int tmp;tmp=*x;*x=*y;*y=tmp;}
輸出結果a=15,b=10。變量a和b的值發生了交換。這是因為我們利用指針訪問變量的存儲單元,間接修改變量的值。
2、指針指向數組:
定義一個數組并初始化,int array[5]={2,5,12,7,8},定義一個指針變量并把數組的地址賦給它,int *p=array,注意數組名就是數組的地址,而且數組的地址就是首元素的地址。因此我們的指針變量就指向了數組的首元素,*p=2。如果把(p+1),那么指針變量就指向了數組的下一個元素5,因此我們可以利用指針來遍歷數組的各個元素:
int main()
{int array[5]={2,5,12,7,8};int *p =array;for(int i=0;i<5;i++){printf("array[%d]=%d ",i,*(p+i));}return 0;}
3、指針指向字符串:
我們都知道用數組存儲字符串,如char name[20]="jack",上面已經簡單講述了指針指向數組,所以我們可以這樣做,char *name="jack",指針變量指向字符串的首個字符并可以依次訪問字符串的各個字符。
4,指針指向函數:
我們需要知道怎樣表示一個指針指向函數,說白了就是語法要正確,下面我也取一個代碼塊來說明一下:
int sum(int x,int y)
{return x+y;}
int main()
{int a=5;int b=6;int (*p)(int,int);p=sum;int result=(*p)(a,b);printf("The result is %d ",result);return 0;}
不難發現上面代碼塊里語句(*p)(a,b)可以用p(a,b)來代替,因為p和sum就是一樣的,只是用前者可能更容易理解一點。而我們要知道怎樣定義一個指針指向函數,int (*p)(int,int)這是固定寫法,前面的int是指針將來指向的函數的返回值的類型,如果沒有函數返回值,那就是void,后面括號里的兩個int 當然就是指針將指向的函數的形參。指針指向函數用起來確實有點抽象,要想熟練運用的話就多去做一些這方面的練習吧!
5,指針指向結構體:
我們首先首先定義一個結構類型,
struct student
{
char *name;
int ages;
};
再根據類型定義結構體變量 struct student stu={"Rose",15};定義一個指針指向結構體類型,struct student *p;把結構體變量stu的地址賦給指針變量p,p=&stu;我們可以有3種方式來訪問結構體中的屬性ages:
stu.ages=15;(*p).ages=15;p->ages=15;不過第三種方式在C語言中只能用來指向結構體。
綜上所述,指針的基本用法就是這幾種,還有些用法不常見的小編在此就一一例舉了,有興趣的話可以去翻閱相關的資料。
-
C語言
+關注
關注
180文章
7604瀏覽量
136845 -
指針
+關注
關注
1文章
480瀏覽量
70564
原文標題:C語言中指針的幾種用法
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論