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

首頁 > 編程 > C > 正文

C語言中的指針以及二級指針代碼詳解

2020-01-26 13:47:29
字體:
來源:轉載
供稿:網友

很多初學者都對C中的指針很迷糊,希望這篇blog能幫助到大家:

1.什么是“指針”:

在執行C程序的時候,由于我們的數據是存儲在內存中的。所以對于C程序本身來說,如果想找到相應被調用的數據,就要知道存儲該數據的內存地址是多少,換言之,C程序通過已知的內存地址到相應的內存位置存儲數據。

這里簡單說一下內存管理(對于初學者來說。為了避免專業術語引發的理解問題,下面的敘述盡量避免專業定義:),對于現代計算機系統來說,內存空間分為兩個區域,一個是“數據區”,一個是“地址區”,“數據區”存儲的是用戶數據,比如我們要把一個數字“5”存儲到計算機(因為一個單純的自然數“5”,是沒有任何意義的,然后對于計算機來說它需要知道你要把什么定義為“5”,你就不得不定義“x=5")對于計算機而言,這個過程分為以下幾個部分:

1.在”棧區(stack)(這個定義實在不能避免,初學者的話就請暫時記住這個名字)“開辟一個空間,用來存放”5“

2.另存存放”5“的內存的地址。

3.將步驟2中的內存地址存在另一個區域(專門用來存放地址的指針區),并記下當前存放步驟2中的內存地址的內存地址(好拗口,這里其實是二級指針的概念)

3.建立一個”索引“將x與步驟3中的內存地址關聯,存放在”索引區“(請注意,x和5不是存在一起的,而是有一個“映射表”,并且 指向 x的指針不會直接指向5,而是直接指向x,再通過“映射表”找到x的值‘5',這個概念非常重要,后面例子會講到利用指針交換兩個變量的值,就是基于“x和5不是存在一起的”這個基本概念)。

這里再多說一嘴:為什么要以這種方式存放數據?

內存的存儲區就像一池湖水,數據就像池水里面的魚,如果不用內存尋址的方式,那么當你找某個特定數據的時候,就相當于在一池湖水里找某一條叫做“張三”的魚一樣--你得一條一條撈出來辨認。

如果有內存尋址,就像把一池湖水用漁網分成若干網格,每個網格里面放一兩條魚并且把每個網格都編號(編號和魚的對應關系假如你用一個小本子記起來),這樣當你想找某條叫“張三“的魚時,你只要打開小本子(指針地址)找相應的網格就可以了。

那么,存儲數據的內存地址(有點拗口)或者說是上面例子里面記載編號和魚的對應關系的小本子就叫指針。

舉個實例吧,如下圖所示,我們將內存存儲空間實體化:假設途中兩條平行線夾的空間是內存可以存儲數據的空間,途中C的位置存儲的是數據,那么P的位置存儲的就是指針。

如何定義指針?

int *p;

注意:

1.這里的int,指的是指針p對應的存儲區的數據格式,并不是指針p的數據格式。你可以理解為指針的數據格式只有一種。

2.*不僅僅是單純的運算符,它還是聲明符??梢园选?”理解為像“int,float,double”等等這樣的格式聲明。

3.在使用指針p的時候,經常會用到地址運算符“&”,請注意“&”是運算符,運算操作是取地址,可以把p直接賦上一個地址值:

int i=5,*p; p=&i; 

于是 *p 的值就是5了。

上面還可以這么寫

int i=5; int *p=&i; 

從這兩個例子的區別可以看出“*”具有類型聲明的作用。

再寫一個交換兩個變量的值的代碼:

#include <stdio.h>  void swap(int *a, int *b) {  int temp;//創建一個中間變量用于交換位置。  temp = *a;  *a = *b;  *b = temp; }  int main() {  int m=10,n=22;  swap(&m,&n);//這里對于理解內存管理原則非常重要,正如前面所說,變量m和其值10不是存在一個內存存儲區,而是兩個,它們通過一個映射表映射起來,所以在這里交換m和n的地址值可以理解為交換了m和n的映射表指向位置。  printf("m=%d,n=%d/n",m,n);   return 1;   } 

上面是通過改變兩個變量地址的方式交換了變量m,n的值。在這個過程用到了內存地址和內存以及指針的定義,如果沒有看懂請回頭再仔細研究指針的定義。

二級指針:

如果你熟悉了指針的定義,那么二級指針應該很好理解,所謂的二級指針,就是指針的指針。

具體解釋一下:因為任何一個變量值(包括指針地址)最后都是要放入到內存中去的,回到之前舉的“池子里的魚”那個例子,所謂的二級指針就是存放那個寫著網格和編號的小本子的位置信息(比如你把這個本子放到某個抽屜里了,那么二級指針記載的內容就是“如何找到這個抽屜”)。

二級指針的定義也很簡單粗暴,一個指針變量 *p存放這個指針變量地址的二級指針就是 *(*p),你可以直接簡單粗暴地簡寫為**p(編譯器是認這個的)。

其他問題:

1.定義一個指針變量*p,那么p到底是什么?

你可以簡單粗暴地把的值p理解為 這個指針變量存儲的地址。切記千萬不要寫成:

int *p=5; 

原因就是我之前說過的,這里再重復一次:*p 只是聲明變量p存儲的內容是地址。*p并不是一個可以賦值的變量,而是一個”特殊的“ 類型定義+變量。

2.該如何在指針中賦值?

下面說幾個合法的賦值:

int *temp = *p;//這是二級指針常用的操作,作用是將指針P的值(指針p的值是地址值,指向的是另外一個地址空間)賦給指針temp指向的值,等價于 int *temp;temp=*p; 
int i=115,j=116,*r=&i,*s=&j;//將i的地址賦給 r</span> 

3.對指針的定義迷糊?

你是不是很奇怪:

int i=5,j=6, *a=&i,*b=&j; 

在這里 *a=&i,*b=j是可以的,但是如果你這么寫:

int i=5,j=6,*a,*b; *a=&i,*b=j; 

這個時候 *a=&i,*b=j就要報錯。

為什么?

原因就是我之前說的:你不可以把在 ”int float這樣的格式聲明后的“”*“理解成為運算符,而是要理解成為一個像”int“這樣的格式聲明?!眎nt *a,double * n,float *c“這樣的搭配含義是”a/b/c是一個指向int/double/float的指針,諸如 int *a=&i這樣的聲明實際上是 (int *)a=&i。請一定記住這個特殊情況,這樣你就不會再迷糊。

4.謹記*a中的*是?。ㄖ羔榓指向的)值運算,&b是?。╞所在的內存的)地址運算。在這里字符a存儲的是地址,而b存儲的是數據,這里再次聲明,一定不要被3中提出的“特殊情況”搞混,那只是一個特例,其他情況不可以那樣用。

總結

以上就是本文關于C語言中的指針以及二級指針代碼詳解的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
8x海外华人永久免费日韩内陆视频| 国产精品午夜一区二区欲梦| 亚洲激情小视频| 国产精欧美一区二区三区| 久久天天躁狠狠躁夜夜躁| 亚洲97在线观看| 欧美亚洲成人网| 青草青草久热精品视频在线观看| 精品成人乱色一区二区| 亚洲福利在线观看| 日韩国产激情在线| 国产精品久久精品| 久久电影一区二区| 欧美激情a在线| 欧美天天综合色影久久精品| 亚洲va欧美va国产综合久久| 国产精品视频内| 色综合伊人色综合网| 一区二区欧美久久| 欧美大学生性色视频| 欧美精品videossex88| 日韩亚洲欧美中文高清在线| 欧美大片va欧美在线播放| 98精品国产高清在线xxxx天堂| 在线成人一区二区| 久久免费高清视频| 欧美另类69精品久久久久9999| 日本一区二区在线免费播放| 日韩在线视频免费观看高清中文| 精品无人区太爽高潮在线播放| 超在线视频97| 国产精品精品视频| 国产成人精品一区二区| 中文字幕精品在线| 久久久av网站| 国产午夜精品一区二区三区| 狠狠久久五月精品中文字幕| 亚洲成人激情在线| 国产一区二区三区高清在线观看| 欧美成在线观看| 日韩成人av一区| 欧美性20hd另类| 中文字幕精品—区二区| 亚洲国产精品久久精品怡红院| 欧美在线视频在线播放完整版免费观看| 少妇激情综合网| 日韩成人激情影院| 高跟丝袜一区二区三区| 久久在线观看视频| 精品中文字幕视频| 亚洲福利精品在线| 亚洲精品456在线播放狼人| 青青草国产精品一区二区| 国产成人精品在线视频| 亚洲性69xxxbbb| 成人欧美一区二区三区黑人孕妇| 欧美在线欧美在线| 亚洲精品在线看| 九九热这里只有精品6| 日韩h在线观看| 欧美大成色www永久网站婷| 日韩av色综合| 中文字幕久久精品| 日韩视频免费看| 成人午夜在线观看| 久久福利网址导航| 韩国精品美女www爽爽爽视频| 亚洲精品自在久久| 青草青草久热精品视频在线网站| 欧美大片免费观看在线观看网站推荐| 欧美一级视频免费在线观看| 日韩激情第一页| 一本色道久久88综合亚洲精品ⅰ| 国产va免费精品高清在线观看| 亚洲精品98久久久久久中文字幕| 青青在线视频一区二区三区| 91爱视频在线| 亚洲免费中文字幕| 成人福利网站在线观看11| 亚洲r级在线观看| 尤物yw午夜国产精品视频| 欧美日韩成人免费| 国产精品第100页| 97超视频免费观看| 国产精品久久久久999| 国产最新精品视频| 亚洲激情视频在线观看| 精品无人区太爽高潮在线播放| 亚洲精品一区二三区不卡| 精品国产乱码久久久久酒店| 日韩三级成人av网| 亚洲欧美另类人妖| 91在线免费观看网站| 性欧美办公室18xxxxhd| 欧美精品福利视频| 亚洲天堂成人在线| 亚洲精品狠狠操| 欧美在线www| 欧美小视频在线观看| 亚洲精品视频网上网址在线观看| 插插插亚洲综合网| 亚洲男人av电影| 国内精品小视频在线观看| 久久琪琪电影院| 一区二区三区www| 国产精品wwww| 丝袜一区二区三区| 国产午夜精品全部视频在线播放| 成人激情视频免费在线| 亚洲最大av网站| 国产一区二区三区欧美| 日韩在线中文视频| 日韩美女视频免费在线观看| 大荫蒂欧美视频另类xxxx| 成人欧美一区二区三区在线| www.亚洲免费视频| 日韩视频中文字幕| 亚洲欧美一区二区精品久久久| 国产精品wwww| 久久久久一本一区二区青青蜜月| 国产精品精品久久久| 欧美日韩在线视频一区二区| 欧美性色19p| 欧美日韩免费区域视频在线观看| 成人精品在线观看| 亚洲国产91精品在线观看| 欧美日韩国产精品一区| 日韩在线播放一区| 91sa在线看| 国产91精品不卡视频| 日本国产精品视频| 亚洲国产精品久久久| 欧美午夜精品久久久久久浪潮| 欧美成人在线网站| 一本一本久久a久久精品综合小说| 亚洲欧洲在线视频| 亚洲欧美日韩中文视频| 91精品国产综合久久香蕉| 自拍视频国产精品| 日本欧美中文字幕| 亚洲字幕一区二区| 亚洲国内精品在线| 91极品女神在线| 亚洲欧美一区二区三区久久| 日韩精品日韩在线观看| 亚洲美女av在线播放| 91精品久久久久久久久青青| 51ⅴ精品国产91久久久久久| 日韩中文娱乐网| 亚洲国产高清高潮精品美女| 欧美日韩另类视频| 丰满岳妇乱一区二区三区| 欧美日韩第一页| 91九色国产社区在线观看| 57pao精品| 91欧美激情另类亚洲| 国产一区二区三区在线视频| 高清日韩电视剧大全免费播放在线观看| 日韩激情在线视频| 韩国v欧美v日本v亚洲| 欧美洲成人男女午夜视频| 91在线免费看网站| 在线播放国产一区中文字幕剧情欧美| 日韩欧美亚洲范冰冰与中字|