天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

Clang Array And Pointer

發(fā)布時(shí)間:2017-03-09 16:45

  本文關(guān)鍵詞:C語(yǔ)言點(diǎn)滴,由筆耕文化傳播整理發(fā)布。


layout: post title: “C語(yǔ)言的指針與數(shù)組種種關(guān)系” category: “c/c++” tags: [sizeof] —

此篇為《C語(yǔ)言點(diǎn)滴》關(guān)于指針的總結(jié)

一. 指針與數(shù)組關(guān)系

指針 數(shù)組

指針 指針指針 指針數(shù)組

數(shù)組 數(shù)組指針 數(shù)組數(shù)組

表1 指針與數(shù)組的組合

假設(shè)以int類型測(cè)試:

指針 數(shù)組

指針 指針指針: int **pp 指針數(shù)組: int *pa[5]

數(shù)組 數(shù)組指針: int (*ap)[5] 數(shù)組數(shù)組: int aa[2][3]

表2:四個(gè)概念的定義

真理:
  • 指針真理:一個(gè)xx 型指針應(yīng)該指向一個(gè)xx 型地址。
  • 數(shù)組真理:xx 型數(shù)組變量就是一個(gè)xx 型地址。
  • 真理推導(dǎo):
  • 根據(jù)真理1可知:一個(gè) 指針型 指針指向一個(gè) 指針型 地址;一個(gè) 數(shù)組型 指針指向一個(gè) 數(shù)組型 地址
  • 根據(jù)真理2可知: 指針型 數(shù)組變量就是一個(gè) 指針型 地址; 數(shù)組型 數(shù)組變量(二維數(shù)組)就是一個(gè) 數(shù)組型 地址。
  • 綜上推導(dǎo):
  • 一個(gè) 指針型指針 可以指向一個(gè) 指針型數(shù)組變量 , 上表第一行 pp = pa
  • 一個(gè) 數(shù)組型指針 可以指向一個(gè) 數(shù)組型數(shù)組(二維數(shù)組) , 上表第二行 ap = aa
  • 指針變量 數(shù)組變量

    char 類型 char *p char a[5]

    指針類型 int **pp int *pa[5]

    數(shù)組類型 int (*ap)[5] int aa[2][3]

    表3 指針變量可指向?qū)?yīng)數(shù)組變量

    二. 指針指針、指針數(shù)組、數(shù)組指針 2.1 指針型指針

    關(guān)于指針型指針,如:

    int i = 5; printf("i=%d, &i=%p\n", i, &i); int *p = &i; printf("*p=%d, p=%p, &p=%p\n", *p, p, &p); int **pp = &p; printf("*pp=%d, pp=%p, &pp=%p\n", **pp, pp, &pp);

    打印輸出:

    i=5, &i=0x004f5a6c *p=5, p=0x004f5a6c, &p=0x004f5a5a *pp=5, pp=0x004f5a5a, &pp=0x004f5a4c 每個(gè)變量,無(wú)論它保存的是什么,它本身也都有地址:
  • 指針變量p 保存的是變量i 的地址0x004f5a6c,但是p 本身的地址是0x004f5a5a。
  • 指針變量pp 中保存的是指針變量p 的地址0x004f5a5a。為了保存指針型變量p 的地址,我們必須定義一個(gè)指針型指針,那就是 int **pp
  • 如下圖示:

    Clang Array And Pointer

    圖1:示意圖

    2.2 指針數(shù)組

    對(duì)于一個(gè)指針數(shù)組,數(shù)組中保存的都是指針,數(shù)組名就是指針型地址。為了保存這種指針型地址,根據(jù)指針真理,我們自然應(yīng)該用指針型指針了。

    如 int *p[3] ,這是因?yàn)?[] 的優(yōu)先級(jí)比 * 號(hào)高,所以 int *p[3] 會(huì)被編譯器解釋為 int *(p[3]) 。這就是指針數(shù)組

    見下:

    char *a[] = {"人生苦短", ":grin:", "Python當(dāng)歌", NULL}; // 指針數(shù)組 char **p; // 指針指針 for (p = a; *p != NULL; p++) { printf("%s\n", *p); }

    打印輸出:

    人生苦短 :grin: Python當(dāng)歌 2.3 數(shù)組指針

    如何定義一個(gè)數(shù)組型的指針?不能寫成 int *p[3] ,這是因?yàn)?[] 的優(yōu)先級(jí)比 * 號(hào)高,所以 int *p[3] 會(huì)被編譯器解釋為 int *(p[3]) 。這其實(shí)就是上面介紹過(guò)的指針數(shù)組,而不是我們要定義的數(shù)組指針。為了解決這個(gè)問(wèn)題,我們用括號(hào)改變它的優(yōu)先級(jí),寫成 int (*p)[3] 。這時(shí) (*p) 是一個(gè)指針,指針指向的類型為 int[3] ,這是一個(gè)一維數(shù)組型變量,符合我們的定義。

    Clang Array And Pointer

    圖2:對(duì)比一維和二維的數(shù)組指針實(shí)例

    有了 int (*p)[3]=array[2][3] 的寫法,我們對(duì)二維數(shù)組也可以利用指針來(lái)進(jìn)行訪問(wèn)了,如下面所示:

  • p 即 &array[0]
  • 代表二維數(shù)組的首地址,,第0 行的地址
  • 代表一維int 數(shù)組型變量int[]的地址
  • p+i 即 &array[i]
  • 代表第i 行的地址
  • 一維int 數(shù)組型變量int[]的地址
  • *(p+i) 即 array[i]
  • 代表第i 行第0 列的地址
  • 一維int 數(shù)組型int[]變量,等價(jià)于int 類型的地址
  • *(p+i)+j 即 &(array[i][j])
  • 代表第i 行第j 列的地址
  • int 類型的地址
  • *(*(p+i)+j ) 即 array[i][j]
  • 代表第i 行第j 列的元素
  • int 類型的值”
  • 還是看代碼測(cè)試吧:

    int array[2][3] = { {101, 102, 103}, {201, 202, 203} }; int (*p)[3] = array; printf("p=%p, &array[0]=%p\n", p, &array[0]); printf(p == &array[0] ? "true\n" : "false\n"); /* * out: * p=0x7fff5cfa2540, &array[0]=0x7fff5cfa2540 * true */ printf("p+1=%p, &array[1]=%p\n", p+1, &array[1]); printf(p+1 == &array[1] ? "true\n" : "false\n"); /* * out: * p+1=0x7fff5cfa254c, &array[1]=0x7fff5cfa254c * true */ printf("*(p+1)=%p, array[1]=%p\n", *(p+1), array[1]); printf(*(p+1) == array[1] ? "true\n" : "false\n"); /* * out: * *(p+1)=0x7fff5cfa254c, array[1]=0x7fff5cfa254c * true */ printf("*(p+1)+2=%p, &(array[1][2])=%p\n", *(p+1)+2, &(array[1][2])); printf(*(p+1)+2 == &(array[1][2]) ? "true\n" : "false\n"); /* * out: * *(p+1)+2=0x7fff5cfa2554, &(array[1][2])=0x7fff5cfa2554 * true */ printf("*(*(p+1)+2)=%d, array[1][2]=%d\n", *(*(p+1)+2), array[1][2]); printf(*(*(p+1)+2) == array[1][2] ? "true\n" : "false\n"); /* * out: * *(*(p+1)+2)=203, array[1][2]=203 * true */

    關(guān)鍵部分就是 優(yōu)先級(jí) , 如 () > [] > *

    下面兩篇文章基本搞定:

  • 數(shù)組指針和指針數(shù)組的區(qū)別
  • 指針數(shù)組和數(shù)組指針
  • 如果還不清楚,就看《深入理解C指針》這本不到200頁(yè)的書。


      本文關(guān)鍵詞:C語(yǔ)言點(diǎn)滴,由筆耕文化傳播整理發(fā)布。



    本文編號(hào):249784

    資料下載
    論文發(fā)表

    本文鏈接:http://sikaile.net/wenshubaike/mishujinen/249784.html


    Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

    版權(quán)申明:資料由用戶9d2ad***提供,本站僅收錄摘要或目錄,作者需要?jiǎng)h除請(qǐng)E-mail郵箱bigeng88@qq.com
    久久精品偷拍视频观看| 亚洲精品福利视频你懂的| 国产一级不卡视频在线观看| 久久综合亚洲精品蜜桃| 欧美成人国产精品高清| 国产白丝粉嫩av在线免费观看| 国产午夜福利不卡片在线观看| 国产精品第一香蕉视频| 国产一级内片内射免费看| 91在线爽的少妇嗷嗷叫| 中文字幕人妻av不卡| 日本精品中文字幕人妻| 又黄又爽禁片视频在线观看| 国产又大又硬又粗又湿| 亚洲一区二区精品免费| 美女激情免费在线观看| 久热青青草视频在线观看| 九九热这里只有精品哦| 日本在线不卡高清欧美| 深夜日本福利在线观看| 黄片免费观看一区二区| 亚洲黄色在线观看免费高清| 区一区二区三中文字幕| 日本办公室三级在线观看| 毛片在线观看免费日韩| 日韩成人免费性生活视频| 成人精品网一区二区三区| 国产色偷丝袜麻豆亚洲| 国产精品亚洲精品亚洲| 日本精品中文字幕在线视频| 国产欧美日韩在线精品一二区| 久久成人国产欧美精品一区二区| 亚洲欧美日韩网友自拍| 国产亚洲欧美日韩精品一区| 麻豆91成人国产在线观看| 超碰在线播放国产精品| 欧美日韩精品一区免费| 国内女人精品一区二区三区| 99久热只有精品视频最新| 欧美精品一区久久精品| 亚洲熟妇熟女久久精品 |