亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

詳解C語言指針的用法

2020-02-24 14:30:30
字體:
來源:轉載
供稿:網友

初學者在C語言學習過程中遇到的最困難的知識點應該是指針,它在C語言中有很好的應用,接下來,武林技術頻道小編為你詳解C語言指針的用法,希望對你學習這方面知識有幫助!

指針是什么??

????? 指針本身是一個變量,它存儲的是數據在內存中的地址而不是數據本身的值。它的定義如下:

 int a=10,*p;   p=&a int a=10; int *p=&a;

?????? 首先我們可以理解 int* 這個是要定義一個指針p,然后因為這個指針存儲的是地址所以要對a取地址(&)將值賦給指針p,也就是說這個指針p指向a。

????? 很多新手都會對這兩種定義方法感到迷惑,其實他倆的意思是一樣的。第一種定義方法定義了int型的變量a和指針p,然后將a的地址賦給p。第二種是在定義指針p的同時將a的地址賦給指針p。我們姑且理解為" int * "是定義指針的標志。

指針有什么用?

?? 這樣我們就可以通過*p來找到指針所指向的變量a的地址,然后對地址中的值(值是10)進行操作。

//接著上面的代碼printf("%p",p)   //結果是一個地址(p指向的變量a的地址)。printf("%d",*p)  //結果是10,變量a的值。printf("%d",&p)  //結果是一個地址(指針p的地址,因為指針也是一個變量自己也有地址的)

數組名和指針的區別?

? 數組名是一個地址,它可以被理解為一個常指針(它只能指向本數組首元素的地址)。而指針可以指其他的變量等等。

int str[5]={1,2,3,4,5};int *p=str;printf("%d",*p);  //輸出為1,數組的首元素。printf("%d",*str); //輸出為1,數組的首元素。printf("%d",str[0]); //輸出為1,數組的首元素。printf("%p",p); //輸出為地址,數組的地址。printf("%p",str); //輸出為地址,數組的地址。printf("%d",*(p+1)); //輸出為2,數組的第二個元素。printf("%d",*(srt+1)); //輸出為2,數組的第二個元素。

對照代碼大家可以很清晰的看到數組名在對內存中存儲的數據進行操作的方法和結果是一樣,但是數組名存儲自己數組本身的首地址。

什么是空指針,野指針?

????? 在函數內部對指針進行賦值操作后,在函數執行完畢后,該指針就成了一個空指針(變量從棧中彈出)。但是通過動態地址分配(堆空間)的指針不會有上述問題。

??????? free(p)后釋放內存的指針為野指針。

關于const對于指針的限制問題

int a=10,b=20;int * const p=&a;  //無法使p指向其他地址。p=&b;          //這樣的操作是不允許的。*p=20;          //可以這樣操作。const int * p=&a;   //p可以指向其他地址。p=&b;           //可以操作。*p=10;           //操作不被允許。const int * const p=&a  //p不能指向其他地址,也不能改變地址中的值。p=&b;           //操作不被允許。*p=20;           //操作不被允許。

?????? const在int的左邊那就是不能修改地址中的值,在右邊就是不能指向其他地址,左右都有那就是既不能修改地址的值也不能指向其他地址。?

?????? 新手常出現的問題我個人總結了上述幾點,如果有錯誤的地方希望大家留言交流互相學習。后面會寫下多維數組的存儲方式和指針的問題。

下面簡單介紹下c語言指針的幾種用法。

1、指針指向變量:
下面有這樣一個代碼塊:

int main(){int a=10;int b=15;test(a,b);printf("a=%d,b=%d/n",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/n",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/n",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/n",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語言指針的用法介紹,相信您對這些知識都已經有了不錯的了解了,在此小編溫馨提示一下,學習知識都要堅持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91情侣偷在线精品国产| 国产欧美最新羞羞视频在线观看| 精品久久久久久中文字幕大豆网| 亚洲欧美日韩中文视频| 日韩成人av在线| 青青草原一区二区| 久久久久久久色| 久久久久国色av免费观看性色| 国产视频福利一区| 精品无人区太爽高潮在线播放| 欧美一区二区色| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品一区二区电影| 国产精品户外野外| 日韩精品中文在线观看| 亚洲国产古装精品网站| 成人国产亚洲精品a区天堂华泰| 久久全球大尺度高清视频| 国产在线a不卡| 日韩精品视频中文在线观看| 国产专区精品视频| 伊人久久大香线蕉av一区二区| 久久99久久99精品中文字幕| 综合网日日天干夜夜久久| 日韩一二三在线视频播| 久久精品中文字幕免费mv| 日韩精品免费在线观看| 中文字幕久热精品在线视频| 欧美韩国理论所午夜片917电影| 日韩中文字幕免费看| 久久99精品国产99久久6尤物| 国产97人人超碰caoprom| 日韩电视剧免费观看网站| 欧美激情伊人电影| 在线观看精品国产视频| 成人久久一区二区三区| 国产精品视频播放| 日韩视频永久免费观看| 欧美日韩精品在线视频| 亚洲一区中文字幕在线观看| www.亚洲一二| 欧美乱大交xxxxx| 91网站免费观看| 欧日韩不卡在线视频| 亚洲黄色有码视频| 日本欧美一级片| 国产主播喷水一区二区| 亚洲精品国产免费| 国产精品视频一| 韩国19禁主播vip福利视频| 久久视频在线播放| 日韩av理论片| 欧美精品日韩www.p站| 日本精品视频在线| 亚洲国产成人av在线| 亚洲欧美在线磁力| 久久久成人av| 亚洲免费电影一区| 国产精品欧美激情在线播放| 国产主播欧美精品| 亚洲一区二区福利| 国产丝袜一区视频在线观看| 国产精品丝袜高跟| 欧美激情xxxx| 久久这里只有精品99| 亚洲欧美另类中文字幕| 欧美区二区三区| 亚洲视频精品在线| 国产精品视频26uuu| 一个人看的www久久| 亚洲精品wwwww| 精品国偷自产在线视频99| 国产精品久久久久久久久久| 国产婷婷97碰碰久久人人蜜臀| 18性欧美xxxⅹ性满足| 欧美刺激性大交免费视频| 性色av一区二区三区免费| 国产精选久久久久久| 欧美一级淫片videoshd| 亚洲视频在线观看视频| 狠狠色狠色综合曰曰| 91成人福利在线| 久久视频精品在线| 日韩经典一区二区三区| 5566成人精品视频免费| 日韩电影在线观看免费| 人人爽久久涩噜噜噜网站| 欧美午夜片在线免费观看| 日韩**中文字幕毛片| 欧美成人合集magnet| 中文字幕亚洲无线码a| 北条麻妃在线一区二区| 色小说视频一区| 精品久久久久久久久久国产| 国产精品啪视频| 全亚洲最色的网站在线观看| 国产精品大陆在线观看| 日韩av在线精品| 欧美亚洲第一区| 亚洲精品免费一区二区三区| 视频在线一区二区| 亚洲午夜国产成人av电影男同| 久久久久国产精品一区| 欧美国产日韩视频| 日韩精品中文在线观看| 91国自产精品中文字幕亚洲| 欧美成人在线网站| 精品小视频在线| 最新日韩中文字幕| 日韩免费视频在线观看| 日韩精品极品在线观看| 国内伊人久久久久久网站视频| 国产91av在线| 国产成人精品在线播放| 欧美激情乱人伦| 日本三级韩国三级久久| 久久久中文字幕| 亚洲第一综合天堂另类专| 亚洲欧美一区二区精品久久久| www.日韩视频| 欧美孕妇性xx| 欧美日韩久久久久| 深夜精品寂寞黄网站在线观看| 国产成人精品免费视频| 亚洲精品videossex少妇| 成人免费观看a| 91精品国产91久久久久久不卡| 91在线免费看网站| 92看片淫黄大片欧美看国产片| 亚洲女人初尝黑人巨大| 国产999精品视频| 国产精品91久久久| 欧美电影免费观看高清完整| 亚洲高清色综合| 亚洲视频在线视频| 日韩国产高清污视频在线观看| 亚洲免费人成在线视频观看| 色偷偷av一区二区三区| 欧美尺度大的性做爰视频| 亚洲欧美制服综合另类| 久久影院资源网| 欧美日韩精品中文字幕| 国产色婷婷国产综合在线理论片a| 日韩av中文字幕在线| 午夜精品久久久99热福利| 久久精品国产视频| 国产精品啪视频| 亚洲欧美一区二区精品久久久| 97视频国产在线| 国产国语videosex另类| 国产精品99久久99久久久二8| 欧美中文字幕在线观看| 尤物yw午夜国产精品视频明星| 国产激情久久久久| 久久久久久亚洲精品中文字幕| 在线看日韩av| 久久久999国产精品| 亚洲精品短视频| 亚洲国产私拍精品国模在线观看| 久久精品99久久久香蕉| 亚洲精品电影网在线观看| 欧美性xxxxx极品娇小| 欧美日韩免费区域视频在线观看| 亚洲图片欧美日产|