精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C語言核心之數組和指針詳解

開發 后端
在C語言中,函數雖然不是變量,但可以定義指向函數的指針。這種類型的指針可以被賦值,存放在數組中,傳遞給函數以及作為函數的返回值等。

指針

[[177918]]

相信大家對下面的代碼不陌生:

  1. int i=2;                                            
  2. int *p;                                             
  3. p=&i; 

這是最簡單的指針應用,也是最基本的用法。再來熟悉一下什么是指針:首先指針是一個變量,它保存的并不是平常的數據,而是變量的地址。如上代碼,指針p中保存的是整型變量i的地址信息。

接下來看如何定義一個指針,既然指針也是一個變量,那么它的定義也和其它變量一樣定義:如:int p;是間接尋址或間接引用運算符。上例中我們還看到了一個特別的運算符&,它是一個取地址運算符(在其他合適場合&也是按位運算運算符,&&為取交集運算符)。

在上面的指針定義中,我們看到了定義的是一個整型指針,難道指針還有類型嗎?答案是肯定的,指針只能指向某種特定類型的對象,也就是說,每個指針都必須指向某種特定的數據類型(***的例外:指向void類型的指針可以存放指向任何類型的指針,但它不能間接引用其自身。)。比如,int 類型的指針絕對不能指向char 類型的變量。

下面我們給出一個完整的例子來說明指針的簡單應用:

  1. #include<stdio.h> 
  2. void main() 
  3.     int a,b,c,*p; 
  4.     a=1; 
  5.     b=3; 
  6.     p=&a; 
  7.     b=*p+1; 
  8.     c=*(p+1); 
  9.     printf("%d %d %d %d /n",a,b,c,*p+3); 

運行結果為: 1 2 -858993460 4

這是個完整的例子,可以自己在機器上調試一下,現在很多人用的都是微軟的Visual Studio 開發環境,有人就不知道在該開發環境中怎么寫C程序以及調試C程序,具體境況可以參考附錄。

在上面例子中,看到了這樣兩個表達式b=p+1;和c=(p+1);前者的意思是p所指的地址里的內容加1再賦給b,相當于b=a+1;,后者是p所指的地址加1再把(p+1)所指的地址賦給c,當然我們不知道p的下一個地址里放的是什么,所以輸出了一個隨機值(這樣的操作時很危險的,切記不要使用不確定的內存地址)。

數組

數組大家應該都很熟悉了,用途非常廣泛。

  1. int a[4]={2,4,5,9}; 

此語句定義一個4個空間大小的整型數組a并為它進行了初始化。

數組的基礎知識可以參考其他相應的教材,我們在這主要討論指針和數組的結合應用。

我們再來看個完整的例子:

  1. #include<stdio.h> 
  2. void main() 
  3.     int a[4]={2,4,5,9}; 
  4.     int *p; 
  5.     p=a; 
  6.     *p=*p++; 
  7.     printf("%d %d %d/n",*p,*p+6,*(p+1)); 

運行結果:4 10 5

分析:語句p=a;表示把數組a的第0個元素的地址賦給指針p,數組名a代表的是數組a的第0個元素的地址。

a[i]表示數組a的第i個元素,如果定義一個指針p,那么語句p=&a[0];表示可以將指針p指向數組a的第0個元素,也就是說p的值為數組元素a[0]的地址。那么(p+1)引用的是數組元素a[1]的內容,p+i是數組元素a[i]的地址,(p+i)引用的是數組元素a[i]的內容。對數組元素a[i]的引用也可以寫成(a+i)。可以得出結論:&a[i]與a+i的含義相同,p[i]與(p+i)也是等價的。

雖然數組和指針有這么多通用的地方,但我們必須記住,數組名和指針之間有一個不同之處。指針是一個變量,因此語句p=a和p++都是合法的。但數組名不是變量,因此,類似于a=p和a++形式的語句是非法的。

下面來看一個我們常用的函數strlen(char *s):

  1. int strlen(char *s) 
  2.     int n; 
  3.     for(n=0;*s!='/0';s++) 
  4.           n++; 
  5.     return n; 

因為s是一個指針,所以對其執行自增運算是合法的。執行s++運算不會影響到strlen函數的調用者中的字符串,它僅對該指針在strlen函數中的私有副本進行自增運算。在函數定義中,形式參數char s[]和char *s是等價的。

我們再來看一下地址算術運算:如果p是一個指向數組中某個元素的指針,那么p++將對p進行自增運算并指向下一個元素,而p+=i將對p進行加i的增量運算,使其指向指針p當前所指向元素之后的第i個元素。同其他類型的變量一樣,指針也可以進行初始化。通常,對指針有意義的初始化值只能是0或者是表示地址的表達式,對后者來說,表達式所表達的地址必須是在此之前已定義的具有適當類型的數據的地址。任何指針與0進行相等或者不相等的比較運算都有意義。但是指向不同數組的元素的指針之間的算術或比較運算沒有意義。指針還可以和整數進行相加或相減運算。如p+n表示指針p當前指向的對象之后第n個對象的地址。無論指針p指向的對象是何種類型,上述結論都成立。在計算p+n時,n將根據p指向的對象的長度按比例縮放,而p指向的對象的長度則取決于p的聲明。例如,如果int類型占4個字節的存儲空間,那么在int類型的計算中對應的n將按4的倍數來計算。

指針的減法運算也是有意義的,如果p和q指向相同數組中的元素,且p<q,那么q-p+1就是位于p和q指向的元素之間的元素的數目。我們來看一下strlen(char *s)的另一個版本:

  1. int strlen(char *s) 
  2.    char *p=s; 
  3.    while(*p!='/0'
  4.           p++; 
  5.    return p-s; 

程序中,p被初始化為指向s,即指向該字符串的***個字符,while循環語句將依次檢查字符串中的每個字符,直到遇到標識字符數組結尾的字符’/0’為止。由于p是指向字符的指針,所以每執行以此p++,p就將指向下一個字符的地址,p-s則表示已經檢查過的字符數,即字符串長度。

總結:有效的指針運算包括相同類型指針之間的賦值運算;指針和整數之間的加減運算;指向相同數組中元素的兩個指針間的減法或比較運算;將指針賦值為0或指針與0之間的比較運算。其他所有形式的指針運算都是非法的。

再來看兩條語句:

char  a[]=”I  am  a  boy”;  char *p=”I  am  a  boy”;

a是一個僅僅足以存放初始化字符串以及空字符’/0’的一維數組。數組中的單個字符可以進行修改,但a始終指向同一個存儲位置。而p是一個指針,其初值指向一個字符串常量,之后它可以被修改以指向其他地址,但如果試圖修改字符串的內容,結果是沒有定義的。

為了更容易理解數組和指針的關系,我們再來看一個函數:

  1. void strcpy(char *s,char *t) 
  2.    int i; 
  3.    i=0; 
  4.    while((s[i]=t[i])!='/0'
  5.           i++; 

因為參數是通過值傳遞的,所以在strcpy函數中可以以任何方式使用參數s和t。

下面是指針實現的幾個版本:

  1. void strcpy(char *s,char *t) 
  2.    while((*s=*t)!='/0'){ 
  3.           s++; 
  4.           t++; 
  5.    } 

最簡版本:

  1. void strcpy(char *s,char *t) 
  2.    while(*s++=*t++) 
  3.           ; 

這里,s和t的自增運算放到了循環的測試部分中。表達式*t++的值是執行自增運算之前t所指向的字符。后綴運算符++表示在讀取該字符之后才改變t的值。同樣,在s執行自增運算之前,字符就被存儲到了指針s指向的舊位置。上面的版本中表達式同’/0’的比較是多余的,因為只需要判斷表達式的值是否為0即可。

指針數組和指向指針的指針

這兩個詞次聽起來挺新穎的,到底是什么意思呢?

由于指針本身也是變量,所以它們也可以像其他變量一樣存儲在數組中。這一點很容易理解。

  1. #include<stdio.h> 
  2. #include<string.h> 
  3. void main() 
  4.    int i; 
  5.    char b[]={"wustrive_2008"}; char *a[1]; *a=b; for(i=0;i<strlen(b);i++) printf("%c",*(a[0]+i)); printf("/n"); 

運行結果:wustrive_2008

這里庫函數strlen,strlen為string類的標準庫函數,所以要包含#include。

下面我們來自己寫一個strlen函數,我們把上面的例子該成這樣:

  1. #include<stdio.h> 
  2. int strlen(char *s) 
  3.    char *p=s; 
  4.    while(*p!='/0'
  5.           p++; 
  6.    return p-s; 
  7. void main() 
  8.    int i; 
  9.    char b[]={"wustrive_2008"}; char *a[1]; *a=b; for(i=0;i<strlen(b);i++) printf("%c",*(a[0]+i)); printf("/n"); 

這個運行結果和上個例子一樣,不一樣的只是我們自己實現了strlen函數,我們再編程時使用的庫函數,都是語言的開發者或者系統為我們寫好了的函數,其實我們也可以自己寫。

這個例子很好的演示了指針數組的用法,指針數組a的值a[1]是一個指針,指向字符數組***個字符。

指針的指針也很好理解,就是一個指針里放的是另一個指針的地址,而另一個指針可能指向一個變量的地址,還可能指向另一個指針。

指針和多維數組

看兩個定義語句:int a[5][10]; int *b[5];

從語法角度講,a[3][4]和b[3][4]都是對一個int對象的合法引用。但a是一個真正的二維數組,它分配了50個int類型長度的存儲空間。但b定義僅僅分配了5個指針,并且沒有初始化,它們必須進行顯示的初始化,假設b的每個元素都指向一個有10個元素的數組,那么編譯器就要為它分配50個int類型長度的存儲空間以及5個指針存儲空間。指針數組的一個重要優點在于,數組的每一行長度可以不同,也就是說,b的每個元素不必都指向一個有10個元素的向量。

指向函數的指針:

在C語言中,函數雖然不是變量,但可以定義指向函數的指針。這種類型的指針可以被賦值,存放在數組中,傳遞給函數以及作為函數的返回值等。

如果下面的語句為一個函數的參數,表示什么意思:

  1. int (p)(void ,void *) 

它表明p是一個指向函數的指針,該函數具有兩個void類型的參數,其返回值類型為int。語句if((p)(v[i],v[left])<0)中,p的使用和其聲明是一致的,p是一個指向函數的指針,p代表一個函數。如果寫成這樣:int p(void ,void )則表明p是一個函數,該函數返回一個int類型的指針。

下面來看兩個聲明:

int  *f();      //f是一個函數,它返回一個指向int類型的指針
int   (*pf)();     //pf是一個指向函數的指針,該函數返回一個int類型的對象。

 

責任編輯:張燕妮 來源: wustrive
相關推薦

2011-07-15 01:38:56

C++this指針

2014-04-01 10:11:33

C語言指針

2021-08-06 13:48:53

C語言野指針內存

2011-07-15 01:20:58

C指針函數函數指針

2009-09-27 11:14:09

C#數組

2009-09-16 09:00:15

C#數組C#指針

2022-07-14 16:35:11

C語言編程語言

2021-12-21 15:31:10

C++語言指針

2021-02-24 15:05:32

C語言數組代碼

2015-12-24 09:48:40

JavaScriptthis指針深

2011-07-13 16:14:53

C++引用指針

2021-01-13 06:58:35

C語言函數指針

2023-09-14 12:35:28

寄存器

2021-07-29 06:09:05

萬能指針C語言void

2024-01-29 00:30:00

C語言代碼數組

2009-07-31 15:10:21

C#函數指針數組C#數組

2020-09-23 16:55:43

C語言編程語言

2009-01-08 09:26:06

C語言指針類型

2022-03-29 08:30:47

指針數組C語言

2015-03-09 09:34:04

C語言函數指針
點贊
收藏

51CTO技術棧公眾號

精品一区二区三区视频在线播放| 国产91视觉| 亚洲精品第三页| 欧美三级黄网| 国产成人久久精品77777最新版本| 精品国产一区二区三区久久狼5月| 免费在线亚洲欧美| 亚洲精华国产欧美| 精品国产1区2区3区| 人妻无码久久一区二区三区免费| 天天射天天色天天干| 午夜一区不卡| 视频在线一区二区| av地址在线观看| 黄色在线观看www| 久久九九久久九九| 成人亚洲激情网| 国产一级片久久| 精品国产乱码久久久久久果冻传媒 | 亚洲欧洲av在线| 91九色单男在线观看| 精品人妻在线播放| 五月天久久狠狠| 国产色综合天天综合网| 亚洲调教欧美在线| 日本欧美韩国| 亚洲福利国产精品| 就去色蜜桃综合| 一级黄色大毛片| 伊人久久婷婷| 日韩欧美国产系列| 欧美精品性生活| 男女免费观看在线爽爽爽视频| 久久亚洲综合av| 91在线观看免费观看| 国产无人区码熟妇毛片多| 91综合网人人| 亚洲毛片在线看| 国产女同无遮挡互慰高潮91| 涩涩在线视频| 亚洲黄色性网站| 色一情一乱一伦一区二区三欧美 | 日本妇女毛茸茸| 日本福利一区| 日韩精品在线网站| 一区二区三区免费播放| 91av久久| 一区二区三区在线视频播放| 亚洲精品一区二区三区av| 四虎在线免费看| 国产成人av资源| 亚洲综合精品一区二区| 亚洲综合五月天婷婷丁香| 国产欧美日韩一级| 久久久噜噜噜久噜久久| 亚洲精品国产精品乱码在线观看| 亚洲伊人春色| 日韩成人av网| 亚洲国产精品自拍视频| 99a精品视频在线观看| 日韩一级片在线观看| 亚洲蜜臀av乱码久久精品 | 亚洲无av在线中文字幕| 在线免费看v片| 美女久久久久久| 91精品福利在线| 国产91在线视频观看| 黑人玩欧美人三根一起进| 亚洲欧美日韩电影| 中文字幕日韩精品一区二区| 香蕉视频在线播放| 国产精品美女久久久久久久久久久| 欧美日韩国产精品一区二区| 四虎影视在线播放| 久久免费美女视频| 久久99热只有频精品91密拍| 亚洲爱情岛论坛永久| 国产一区二区精品久久| 成人av.网址在线网站| 国产精品sm调教免费专区| 日韩专区一卡二卡| 欧美在线日韩在线| 久久久久资源| 中文字幕av片| 久久99久久久久| 成人在线精品视频| www国产在线| 成人爱爱电影网址| 久久国产一区二区| 高清国产福利在线观看| 中文字幕av资源一区| 欧美日韩精品免费观看视一区二区| 黄网在线免费| 中文字幕制服丝袜一区二区三区| 在线视频亚洲自拍| 色婷婷视频在线观看| 亚洲成av人影院在线观看网| 欧美国产激情视频| 欧美日韩国产网站| 91麻豆精品91久久久久久清纯| 国模大尺度视频| 全国精品免费看| 日韩黄色高清视频| 无码国产69精品久久久久同性| 成人精品视频| 国产丝袜在线精品| 国产欧美日韩精品丝袜高跟鞋| 一本一道精品欧美中文字幕| 国产传媒日韩欧美成人| av蓝导航精品导航| 午夜小视频在线播放| 91在线视频官网| 亚洲春色在线视频| 青春草视频在线观看| 日本黄色一区二区| 中文字幕色网站| 日本精品影院| 久久色在线播放| 天天天天天天天天操| 影音先锋久久久| 国产精品久久久久久久天堂| 99久久婷婷国产一区二区三区| av一本久道久久综合久久鬼色| 色姑娘综合网| a级大胆欧美人体大胆666| 在线观看免费视频综合| 国产sm在线观看| 欧美呦呦网站| 91a在线视频| 99精品人妻无码专区在线视频区| 久久久久久**毛片大全| 肉大捧一出免费观看网站在线播放| 欧美粗大gay| 欧美一级艳片视频免费观看| 亚洲v国产v欧美v久久久久久| 欧美三级视频| 国产精品一区二区三区毛片淫片| 婷婷久久久久久| 亚洲色图另类专区| 三级在线视频观看| 欧美禁忌电影网| 久久免费国产精品1| 国产又粗又猛又黄又爽| 久久久久国产一区二区三区四区| 日本福利视频一区| 成人综合日日夜夜| 中文字幕久久久av一区| 无码人妻一区二区三区免费| 成人午夜视频在线| 成人一区二区av| 国产精品亚洲欧美一级在线 | 国产成人麻豆精品午夜在线| 国产欧美一区二区精品秋霞影院 | 在线视频亚洲一区| 久久国产精品影院| 亚洲精品美女91| 草莓视频一区| 在线免费观看污| 91麻豆精品国产91久久久资源速度 | 日韩精品免费综合视频在线播放| 午夜三级在线观看| 日韩激情在线观看| 日韩视频在线观看国产| 国产私拍福利精品视频二区| 亚洲欧美精品一区| 青青国产在线观看| 丁香天五香天堂综合| 日本男女交配视频| 2021年精品国产福利在线| 久久国产精品久久久久久| 一区二区日韩视频| 中文字幕视频一区| 91亚洲一区二区| 欧美日韩成人| 国产高清自拍一区| 精品丝袜在线| 亚洲欧洲在线播放| 这里只有精品999| 国产精品美女久久久久久久| 一区二区免费av| 午夜精品视频| 国产精品美女诱惑| caoprom在线| 日韩精品免费在线播放| 久久永久免费视频| 国产精品视频免费看| 五月花丁香婷婷| 国产精品99一区二区| 国产欧美亚洲日本| 中文日产幕无线码一区二区| 一区二区三区动漫| 国产又粗又大又爽视频| 一区二区三区四区五区视频在线观看| 日本精品一二三| 亚欧美中日韩视频| 欧美日韩在线一区二区三区| 久久av日韩| 欧美激情中文网| 国产三级视频在线看| 在线播放91灌醉迷j高跟美女| 国产精品九九九九九九| 99久久免费精品高清特色大片| 一本大道熟女人妻中文字幕在线| 日韩久久综合| 国产日韩一区二区| 不卡亚洲精品| 久久久久一本一区二区青青蜜月 | 亚洲欧美国产一本综合首页| 夜夜骚av一区二区三区| 一区二区在线电影| 法国空姐电影在线观看| 久久精品国内一区二区三区| 欧美亚洲黄色片| 欧美久久精品一级c片| 99re在线国产| 91国内外精品自在线播放| 欧美成人免费播放| 精品av中文字幕在线毛片| 91精品国产色综合久久不卡蜜臀| 欧美福利视频一区二区| 亚洲欧洲国产日韩| 全黄一级裸体片| 国产成人综合自拍| 97xxxxx| 天堂网在线观看国产精品| 国外成人免费视频| 国产精品一区免费在线| 日韩免费av一区二区| 美女网站视频在线| 色偷偷91综合久久噜噜| 深夜福利在线看| 日韩欧美一级片| 亚洲一区二区三区高清视频| 富二代精品短视频| 九九九久久久久| 国产精品久久久久久久久果冻传媒 | 第一视频专区在线| 亚洲大胆美女视频| 国产日韩一级片| 粉嫩老牛aⅴ一区二区三区| 国产97免费视频| 国产精品日韩精品欧美在线| 日韩精品卡通动漫网站| 成人的网站免费观看| 亚洲av综合色区无码另类小说| 噜噜噜久久亚洲精品国产品小说| 四虎精品欧美一区二区免费| 欧美日韩亚洲在线观看| 久久亚洲一区二区| 老牛影视av一区二区在线观看| 99超碰麻豆| 日本精品国产| 91中文精品字幕在线视频| 成人亚洲免费| 国产精品久久久久免费a∨| av今日在线| 久久精品国产精品亚洲| 日本视频在线免费观看| 在线性视频日韩欧美| 川上优的av在线一区二区| 精品中文字幕久久久久久| 色呦呦视频在线| 亚洲激情免费观看| 手机在线观看免费av| 欧美v国产在线一区二区三区| a毛片在线免费观看| 日韩亚洲欧美综合| 亚洲AV无码乱码国产精品牛牛| 91精品国产综合久久久久久久| 无码任你躁久久久久久久| 亚洲一区二区3| 日本三级片在线观看| 亚洲成人精品一区二区| 羞羞影院体验区| 亚洲影院久久精品| 日韩欧美不卡视频| 福利二区91精品bt7086| 国产一级片av| 欧美卡1卡2卡| a在线观看视频| 亚洲福利视频久久| 香蕉视频网站在线| 亚洲天堂网在线观看| 成年人视频网站在线| 日韩一区二区三区国产| 婷婷免费在线视频| 亚洲亚裔videos黑人hd| 免费黄色网页在线观看| 欧美激情高清视频| 中文av在线全新| 日本国产欧美一区二区三区| 欧美成人家庭影院| 97人人模人人爽人人少妇| 粉嫩精品导航导航| 欧洲av一区| 综合久久十次| av黄色在线网站| 精品一区免费av| 国产精品成人免费一区久久羞羞| 91蝌蚪国产九色| 四季av中文字幕| 一区二区不卡在线视频 午夜欧美不卡在| 欧美成人aaa片一区国产精品| 亚洲成av人片在线观看无码| 波多野结衣一区二区在线| 欧美一区二区视频网站| 三区在线视频| 久久成人av网站| 亚洲欧洲美洲av| 91亚洲精品一区| 亚洲综合图色| 99精品视频网站| 国产精品久久国产愉拍| www.国产视频.com| 26uuu精品一区二区| 老湿机69福利| 91久久精品一区二区| 精品国产18久久久久久| 亚洲色图色老头| 国产高清在线a视频大全 | 日韩精品日韩在线观看| 免费观看久久久久| 国产ts一区二区| 天天躁日日躁狠狠躁欧美巨大小说 | 手机看片久久久| 欧美一区二区三区影视| 欧美xxx.com| 欧美精品videossex性护士| 高清在线一区| 国产日韩二区| 亚洲无毛电影| 午夜影院福利社| 亚洲免费伊人电影| 中文字幕激情视频| 亚洲欧美精品中文字幕在线| hd国产人妖ts另类视频| 91精品黄色| 91欧美国产| 免费男同深夜夜行网站| 风间由美性色一区二区三区| 蜜桃视频最新网址| 欧美视频在线观看一区| 毛片免费在线| 欧美自拍视频在线| 亚洲aa在线| www插插插无码视频网站| 国产精品一卡二卡| 亚洲色图欧美色| 欧美伊人精品成人久久综合97| 色吊丝在线永久观看最新版本| 久久久女女女女999久久| 深夜福利一区| 日本福利视频在线观看| 国产一区二区不卡在线| 亚洲波多野结衣| 色丁香久综合在线久综合在线观看| 亚洲第九十九页| 色综合视频一区中文字幕| 国产亚洲精aa在线看| 亚洲免费视频播放| 国产精品 日产精品 欧美精品| 国产一区二区精彩视频| 91精品国产综合久久久蜜臀图片| 亚洲xxxxxx| 亚洲伊人一本大道中文字幕| 精品成人在线| 欧美图片一区二区| 欧美日韩在线播放三区四区| 乱人伦中文视频在线| 97视频中文字幕| 一本久久知道综合久久| 欧美18—19性高清hd4k| 欧美日韩国产首页| 少女频道在线观看高清| 久久综合久久久| 九一久久久久久| 黄色片视频网站| 伊人久久五月天| 日韩在线成人| 日韩欧美精品在线观看视频| 国产精品久线在线观看| 午夜精品久久久久久久96蜜桃| 欧美亚洲成人精品| 亚洲精品久久久| 性久久久久久久久久久| 在线观看日韩高清av| 牛牛电影国产一区二区| 欧美精彩一区二区三区| 国产自产高清不卡| 日本视频在线观看免费| 精品国偷自产在线视频| 美日韩黄色大片| 青青草久久伊人| 欧美日韩亚洲高清| 99视频免费在线观看| 日本免费高清不卡| 国产成人在线观看免费网站| 免费一级a毛片| 国精产品一区一区三区有限在线| 日韩精品免费|