日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

指向二维数组的指针测试

發布時間:2023/12/2 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 指向二维数组的指针测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義a為二維數組后,有三種成份:數組本身、3個一維數組(a的每一行對應一個一維數組)、12個數組元素,

由此就有三種指針及對應的指針變量,

  • &a和int (*p1)[3][4](沒有實用意義)、
  • &a[i]和int (*p2)[4](當i為0時,&a[0]可簡化為a)、
  • a[i][j]和int *p3;
    由于指針類型匹配是完全匹配,所以初始化形式必須嚴謹。
    上面有人寫出
    int (*p)[4]=&a;
    則是類型不匹配,指向一維數組的指針變量指向了二維數組,盡管有些編譯器只給warning、盡管有人認為指針值(二維數組a和一維數組a[0]的地址值)是相同的,事實是類型不匹配、錯誤
    還有人寫出
    int *p = &a[0][0];/*或者int *p = a[0];*/
    這個指針變量是指向數組元素的,沒有了數組結構信息,因此用該指針變量訪問數組元素時,只能再提供列數信息進行地址計算: *(p+i*列數+j)
  • 結論是?
    int (*p)[4]=a;/*或者int (*p)[4]=&a[0]*/
    是嚴格指針類型匹配的,且p具有數組結構信息(列數),可以直接訪問數組元素
    *(*(p+i)+j)等價于a[i][j]
    提供一個小“伎倆”供分析用:指針(變量)左邊一個*可等效替換為右邊一個[],兩個*可等效替換為。。。

    上面為引用自CSDN的討論

    ?

    寫個程序測試一下

    1: #include <stdio.h> 2: ? 3: int main() 4: { 5: int s[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}}; 6: int i, j; 7: int (*p)[5] = s;//=&s[0]; 8: int *q = &s[0][0]; 9: ? 10: printf("%d ",s[0][0]); 11: printf("%d ",*s[0]); 12: printf("%d ",**s); 13: 14: printf("%d ",*(*(p+2)+2) ); 15: printf("%d ",*(q+12)); 16: }

    轉載于:https://www.cnblogs.com/ppazhang/archive/2013/05/23/3094180.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的指向二维数组的指针测试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。