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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

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

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

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

更多精彩,歡迎進(jìn)入:http://shop115376623.taobao.com

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


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

前者是指針數(shù)組,后者是指向數(shù)組的指針。更詳細(xì)地說(shuō)。

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

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

兩者在定義的時(shí)候如下:

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];


這樣空說(shuō)是不是依舊小白?舉個(gè)例子

[cpp]?view plaincopy
  • #include?<iostream>???
  • using?namespace?std;???
  • ??
  • int?main()???
  • {???
  • ????int?*p[4];?//p是一個(gè)指針數(shù)組,每一個(gè)指針都指向一個(gè)int型數(shù)據(jù)???
  • ????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是一個(gè)指針,指向int[4]數(shù)組???
  • ????//q[0]=&a;//error???q是指向int[4]數(shù)組的指針,而&a是一個(gè)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;???
  • }???


  • ?運(yùn)行結(jié)果:

    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

    ?

    以下為網(wǎng)友的解釋,可能闡述得更為細(xì)致。

    ?

    ?優(yōu)先級(jí): ?[]? >?*

    定義涉及兩個(gè)運(yùn)算符:“*”(間接引用)、“[]”(下標(biāo)),“[]”的優(yōu)先級(jí)別大于“*”的優(yōu)先級(jí)別。

    ??首先看int *p[4],“[]”的優(yōu)先級(jí)別高,所以它首先是個(gè)大小為4的數(shù)組,即p[4];剩下的“int *”作為補(bǔ)充說(shuō)明,即說(shuō)明該數(shù)組的每一個(gè)元素為指向一個(gè)整型類(lèi)型的指針。int *p[4]的存儲(chǔ)結(jié)構(gòu)如下:(存儲(chǔ)方格橫向排列或豎向排列沒(méi)區(qū)別,只要按內(nèi)存地址順序排列就行,此處只是為畫(huà)圖方便)



    ????再看int (*q)[4]。它首先是個(gè)指針,即*q,剩下的“int [4]”作為補(bǔ)充說(shuō)明,即說(shuō)明指針q指向一個(gè)長(zhǎng)度為4的數(shù)組。int (*q)[4]的存儲(chǔ)結(jié)構(gòu)如下:

    請(qǐng)看以下定義:

    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]的存儲(chǔ)數(shù)據(jù)為:

    驗(yàn)證:

    ?

    ?

    ?

    ?

    #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;

    }

    ?

    輸出結(jié)果為:

    *(*(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

    總結(jié)

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

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。