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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中int *p[4]和 int (*q)[4]的区别

發布時間:2023/12/20 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中int *p[4]和 int (*q)[4]的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

***************************************************

更多精彩,歡迎進入:http://shop115376623.taobao.com

***************************************************


C++中int *p[4]和 int (*q)[4]的區別

前者是指針數組,后者是指向數組的指針。更詳細地說。

前: 指針數組;是一個元素全為指針的數組.【數組中的元素為指針】
后: 數組指針;可以直接理解是指針,只是這個指針類型不是int也不是char,而是 int [4]類型的數組.(可以結合函數指針一并看看......)

int*p[4]------p是一個指針數組,每一個指向一個int型的
int (*q)[4]---------q是一個指針,指向int[4]的數組。

兩者在定義的時候如下:

int k;
cin>>k;

char *p[2];
p[0]=new char[k];
p[1]=new char[k];

char (*b)[2];
b=new char[k][2];


這樣空說是不是依舊小白?舉個例子

[cpp]?view plaincopy
  • #include?<iostream>???
  • using?namespace?std;???
  • ??
  • int?main()???
  • {???
  • ????int?*p[4];?//p是一個指針數組,每一個指針都指向一個int型數據???
  • ????int?a=1,b=2,c=3,d=4;??
  • ????int?i;??
  • ????p[0]=&a;??
  • ????p[1]=&b;??
  • ????p[2]=&c;??
  • ????p[3]=&d;??

  • ????int?(*q)[4];//q是一個指針,指向int[4]數組???
  • ????//q[0]=&a;//error???q是指向int[4]數組的指針,而&a是一個int型指針,所以不能賦值???
  • ????int?aa[4]={5,6,7,8};??
  • ????q=&aa;??
  • ????cout?<<?"p的值:"?<<?p?<<?endl;?//注意,p不等于p[0]???
  • ????cout?<<?"p[0]的值:"?<<?p[0]?<<?"??a的地址:"?<<?&a?<<?endl;??
  • ??????
  • ????cout?<<?"p[0]地址保存的值:"?<<?*(p[0])?<<?"??a的值:"?<<?a?<<?endl;??
  • ????cout?<<?"p[1]地址保存的值:"?<<?*(p[1])?<<?"??b的值:"?<<?b?<<?endl;??
  • ????cout?<<?"p[2]地址保存的值:"?<<?*(p[2])?<<?"??c的值:"?<<?c?<<?endl;??
  • ????cout?<<?"p[3]地址保存的值:"?<<?*(p[3])?<<?"??d的值:"?<<?d?<<?endl;??
  • ??????
  • ??????
  • ????cout?<<?"q的值:"?<<?q?<<?"??aa的地址:"?<<?&aa?<<?endl;??
  • ??????
  • ????cout?<<?"q[i]的地址:"?<<?endl;??
  • ????for(i?=?0;?i?<?4;?++i)??
  • ????cout?<<?q[i]?<<?endl;//q[0]?與?q的值相同???
  • ??????
  • ????cout?<<?"q指向int[4]的所有值:"?<<?endl;??
  • ????for(i?=?0;?i?<?4;?i++)??
  • ????cout?<<?q[0][i]?<<?'?';??
  • ????cout?<<?endl;??
  • ????//cout<<*(p[0])<<*(q[0])<<endl;??
  • ????return?0;???
  • }???


  • ?運行結果:

    p的值:0x22ff60
    p[0]的值:0x22ff5c? a的地址:0x22ff5c
    p[0]地址保存的值:1? a的值:1
    p[1]地址保存的值:2? b的值:2
    p[2]地址保存的值:3? c的值:3
    p[3]地址保存的值:4? d的值:4
    q的值:0x22ff30? aa的地址:0x22ff30
    q[i]的地址:
    0x22ff30
    0x22ff40
    0x22ff50
    0x22ff60
    q指向int[4]的所有值:
    5 6 7 8

    ?

    以下為網友的解釋,可能闡述得更為細致。

    ?

    ?優先級: ?[]? >?*

    定義涉及兩個運算符:“*”(間接引用)、“[]”(下標),“[]”的優先級別大于“*”的優先級別。

    ??首先看int *p[4],“[]”的優先級別高,所以它首先是個大小為4的數組,即p[4];剩下的“int *”作為補充說明,即說明該數組的每一個元素為指向一個整型類型的指針。int *p[4]的存儲結構如下:(存儲方格橫向排列或豎向排列沒區別,只要按內存地址順序排列就行,此處只是為畫圖方便)



    ????再看int (*q)[4]。它首先是個指針,即*q,剩下的“int [4]”作為補充說明,即說明指針q指向一個長度為4的數組。int (*q)[4]的存儲結構如下:

    請看以下定義:

    int a[2][4]={{2,5,6,8},{22,55,66,88}};

    int c[4]={5,8,9,4};

    int d[3]={23,12,443};

    int *p[4],(*q)[4];

    q=a;

    *p=c;

    *(p+1)=d;

    則int *p[4]和int (*q)[4]的存儲數據為:

    驗證:

    ?

    ?

    ?

    ?

    #include <stdio.h>

    int main(void)

    {

    ????int a[2][4]={{2,5,6,8},{22,55,66,88}};

    ????int c[4]={5,8,9,4};

    ????int d[3]={23,12,443};

    ????int *p[4],(*q)[4];

    ????q=a;

    ????*p=c;

    ????*(p+1)=d;

    ????int i,j;

    ????for(i=0;i<2;i++)

    ????????for(j=0;j<4;j++)

    ???????{

    ???????????if((i==1)&&(j==3)) break;

    ???????????printf("*(*(p+%d)+%d)=%d\n",i,j,*(*(p+i)+j));

    ???????}

    ????puts("===============");

    ????for(i=0;i<2;i++)

    ???????for(j=0;j<4;j++)

    ???????????printf("*(*(q+%d)+%d)=%d\n",i,j,*(*(q+i)+j));

    ???return 0;

    }

    ?

    輸出結果為:

    *(*(p+0)+0)=5

    *(*(p+0)+1)=8

    *(*(p+0)+2)=9

    *(*(p+0)+3)=4

    *(*(p+1)+0)=23

    *(*(p+1)+1)=12

    *(*(p+1)+2)=443

    ===============

    *(*(q+0)+0)=2

    *(*(q+0)+1)=5

    *(*(q+0)+2)=6

    *(*(q+0)+3)=8

    *(*(q+1)+0)=22

    *(*(q+1)+1)=55

    *(*(q+1)+2)=66

    *(*(q+1)+3)=88

    總結

    以上是生活随笔為你收集整理的C++中int *p[4]和 int (*q)[4]的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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