欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C++?指針與二維數(shù)組名

 更新時(shí)間:2022年09月13日 08:45:08   作者:木三百川  
和一維數(shù)組類似,C++?將二維數(shù)組名解釋為其第一個(gè)元素的地址,而二維數(shù)組的第一個(gè)元素為一維數(shù)組,下面詳細(xì)總結(jié)下二維數(shù)組名的性質(zhì),需要的朋友可以參考下

和一維數(shù)組類似,C++ 將二維數(shù)組名解釋為其第一個(gè)元素的地址,而二維數(shù)組的第一個(gè)元素為一維數(shù)組,下面詳細(xì)總結(jié)下二維數(shù)組名的性質(zhì)。

和一維數(shù)組類似,C++ 將二維數(shù)組名解釋為其第一個(gè)元素的地址,而二維數(shù)組的第一個(gè)元素為一維數(shù)組,以下面的程序?yàn)槔?,二維數(shù)組名 array2d&array2d[0] 等效,它們的類型都為 short (*)[5];對(duì)數(shù)組名應(yīng)用地址運(yùn)算符時(shí),得到的是整個(gè)數(shù)組的地址,它的類型為 short (*)[5][5],假設(shè) short 寬 2 字節(jié),系統(tǒng)為 32 位,數(shù)組首地址為0x00BCF8FC,例子中幾種表示的區(qū)別為:

  • 數(shù)組名 array2d 和 &array2d[0] 等效,類型都為 short (*)[5],存儲(chǔ)的是一個(gè) 10 字節(jié)內(nèi)存塊的地址,它們指向的對(duì)象是包含 5 個(gè)元素的 short 數(shù)組,但在運(yùn)用 sizeof() 時(shí),這兩者會(huì)有區(qū)別,sizeof(array2d)=50 而 sizeof(&array2d[0])=4。
  • 表示 &array2d 的類型為 short (*)[5][5],存儲(chǔ)的是一個(gè) 50 字節(jié)內(nèi)存塊的地址,它指向的對(duì)象是 5 行 5 列的二維 short 數(shù)組。
  • 表示 &array2d[0][0] 和 array2d[0] 等效,類型都為 short *,存儲(chǔ)的是一個(gè) 2 字節(jié)內(nèi)存塊的地址,它指向的對(duì)象是 short 類型數(shù)據(jù),但在運(yùn)用 sizeof() 時(shí),這兩者會(huì)有區(qū)別,sizeof(&array2d[0][0])=4 而 sizeof(array2d[0])=10。
  • 類型 short **,存儲(chǔ)的是一個(gè) 4 字節(jié)內(nèi)存塊的地址,它指向的對(duì)象是 short* 類型數(shù)據(jù)。
//聲明并初始化數(shù)組
short array2d[5][5] = {{5,2,8,4,1},
                       {2,2,4,6,8},
                       {1,5,8,9,4},
                       {5,7,6,2,5},
                       {7,6,5,8,1}};
 
//聲明并初始化指針一:以下幾種賦值結(jié)果對(duì)ptra等效
short (*ptra)[5] = array2d;     //方式一:值為0x00BCF8FC
short (*ptra)[5] = &array2d[0]; //方式二:值為0x00BCF8FC
 
//聲明并初始化指針二
short (*ptrb)[5][5] = &array2d; //值為0x00BCF8FC
 
//聲明并初始化指針三:以下幾種賦值結(jié)果對(duì)ptrc等效
short *ptrc = &array2d[0][0];   //方式一:值為0x00BCF8FC
short *ptrc = array2d[0];       //方式二:值為0x00BCF8FC
 
//聲明并初始化指針?biāo)模阂韵聨追N賦值結(jié)果對(duì)ptrd等效
short *ptrTmp[5] = {array2d[0],array2d[1],array2d[2],array2d[3],array2d[4]};
short** ptrd = ptrTmp;          //方式一:值為0x00BCF8A4
short** ptrd = new short*[5]{
    array2d[0],
    array2d[1],
    array2d[2],
    array2d[3],
    array2d[4]};                //方式二:值為0x01156470,需配合使用delete[]釋放內(nèi)存
short** ptrd = new short*[5]();
ptrd[0] = array2d[0];
ptrd[1] = array2d[1];
ptrd[2] = array2d[2];
ptrd[3] = array2d[3];
ptrd[4] = array2d[4];           //方式三:值為0x01046AE0,需配合使用delete[]釋放內(nèi)存
 
//訪問(wèn)數(shù)組第3行第4列的元素
cout << array2d[2][3];    //結(jié)果為9
cout << *(array2d[2]+3);  //結(jié)果為9
cout << *(*(array2d+2)+3);//結(jié)果為9
 
cout << ptra[2][3];     //結(jié)果為9
cout << *(ptra[2]+3);   //結(jié)果為9
cout << *(*(ptra+2)+3); //結(jié)果為9
 
cout << (*ptrb)[2][3];  //結(jié)果為9
cout << *((*ptrb)[2]+3);//結(jié)果為9
cout << *(*(*ptrb+2)+3);//結(jié)果為9
 
cout << ptrc[2*5+3];    //結(jié)果為9
cout << *(ptrc+2*5+3);  //結(jié)果為9
 
cout << ptrd[2][3];     //結(jié)果為9
cout << *(ptrd[2]+3);   //結(jié)果為9
cout << *(*(ptrd+2)+3); //結(jié)果為9
 
//應(yīng)用指針?biāo)阈g(shù)時(shí)單位1表示的字節(jié)數(shù)
cout << int(array2d+1)-int(array2d);              //結(jié)果為10
cout << int(&array2d[0]+1)-int(&array2d[0]);      //結(jié)果為10
cout << int(&array2d+1)-int(&array2d);            //結(jié)果為50
cout << int(&array2d[0][0]+1)-int(&array2d[0][0]);//結(jié)果為2
cout << int(array2d[0]+1)-int(array2d[0]);        //結(jié)果為2
 
cout << int(ptra+1)-int(ptra);      //結(jié)果為10
cout << int(ptrb+1)-int(ptrb);      //結(jié)果為50
cout << int(ptrc+1)-int(ptrc);      //結(jié)果為2
cout << int(ptrd+1)-int(ptrd);      //結(jié)果為4
 
//應(yīng)用sizeof()獲得內(nèi)存量大小
cout << sizeof(array2d);       //結(jié)果為50
cout << sizeof(&array2d[0]);   //結(jié)果為4
cout << sizeof(&array2d);      //結(jié)果為4
cout << sizeof(&array2d[0][0]);//結(jié)果為4
cout << sizeof(array2d[0]);    //結(jié)果為10
cout << sizeof(array2d[0][0]); //結(jié)果為2
 
cout << sizeof(ptra);   //結(jié)果為4
cout << sizeof(ptrb);   //結(jié)果為4
cout << sizeof(ptrc);   //結(jié)果為4
cout << sizeof(ptrd);   //結(jié)果為4

版權(quán)聲明:本文系博主原創(chuàng)文章,著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)附上出處鏈接。遵循 署名-非商業(yè)性使用-相同方式共享 4.0 國(guó)際版 (CC BY-NC-SA 4.0) 版權(quán)協(xié)議。

補(bǔ)充介紹:C++二維數(shù)組名與數(shù)組指針的思考

二維數(shù)組名和數(shù)組指針可以當(dāng)做一個(gè)東西用,但兩者之間的含義是不同的。
二維數(shù)組名是一個(gè)指向數(shù)組中所有元素的指針,而數(shù)組指針是一個(gè)行指針。體現(xiàn)在sizeof()上的不同。

#include <iostream>
using namespace std;
int main()
{
    // a是一個(gè)二維數(shù)組名,指向一個(gè)二維數(shù)組
    int a[2][3] = {{1,2,3},{4,5,6}};
    // a所占的內(nèi)存為24,即6*4
    cout<<sizeof(a)<<endl;
    // 輸出為4
    // a:&a[0]   a+1:&a[1]  *(a+1) : a[1] = &a[1][0]
    // **(a+1) = a[1][0]
    cout<<**(a+1)<<endl;
    // 輸出為3
    // a:&a[0]  *a:a[0]:&a[0][0]  *a+2:&a[0][2]
    // *(*a+2):a[0][2]
    cout<<*(*a+2)<<endl;

    // 數(shù)組指針
    int (*b)[3] = a;
    // 數(shù)組指針可以當(dāng)做二維數(shù)組名用
    cout<<**(b+1)<<endl;
    cout<<*(*b+2)<<endl;

    cout<<sizeof(b)<<endl;
}

到此這篇關(guān)于C++ 指針與二維數(shù)組名的文章就介紹到這了,更多相關(guān)C++ 指針與二維數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++通過(guò)msxml調(diào)用webservice示例分享

    C++通過(guò)msxml調(diào)用webservice示例分享

    這篇文章主要介紹了C++通過(guò)msxml調(diào)用webservice示例分享,需要的朋友可以參考下
    2014-03-03
  • 詳解C++語(yǔ)言中的加法運(yùn)算符與賦值運(yùn)算符的用法

    詳解C++語(yǔ)言中的加法運(yùn)算符與賦值運(yùn)算符的用法

    這篇文章主要介紹了C++語(yǔ)言中的加法運(yùn)算符與賦值運(yùn)算符的用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-01-01
  • C++用mysql自帶的頭文件連接數(shù)據(jù)庫(kù)

    C++用mysql自帶的頭文件連接數(shù)據(jù)庫(kù)

    現(xiàn)在正做一個(gè)接口,通過(guò)不同的連接字符串操作不同的數(shù)據(jù)庫(kù)。要用到mysql數(shù)據(jù)庫(kù)。通過(guò)網(wǎng)上的一些資料和自己的摸索,大致清楚了C++連接mysql的方法。可以通過(guò)2種方法實(shí)現(xiàn)。第一種方法是利用ADO連接,第二種方法是利用mysql自己的api函數(shù)進(jìn)行連接。今天主要來(lái)講解下使用API
    2016-07-07
  • MFC創(chuàng)建右鍵彈出菜單的方法

    MFC創(chuàng)建右鍵彈出菜單的方法

    這篇文章主要介紹了MFC創(chuàng)建右鍵彈出菜單的方法,較為詳細(xì)的分析了創(chuàng)建菜單資源及視類添加WM_RBUTTONDOWN消息的實(shí)現(xiàn)方法,是非常實(shí)用的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • C語(yǔ)言實(shí)現(xiàn)多項(xiàng)式的相加

    C語(yǔ)言實(shí)現(xiàn)多項(xiàng)式的相加

    這篇文章主要為大家介紹了C語(yǔ)言實(shí)現(xiàn)多項(xiàng)式的相加,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • OpenCV利用K-means實(shí)現(xiàn)根據(jù)顏色進(jìn)行圖像分割

    OpenCV利用K-means實(shí)現(xiàn)根據(jù)顏色進(jìn)行圖像分割

    K-means是一種經(jīng)典的無(wú)監(jiān)督聚類算法---不需要人工干預(yù)。本文將通過(guò)K-means算法實(shí)現(xiàn)根據(jù)顏色進(jìn)行圖像分割的效果,感興趣的小伙伴可以嘗試一下
    2022-10-10
  • C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)等級(jí)劃分的方法實(shí)例

    C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)等級(jí)劃分的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)等級(jí)劃分的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • VScode搭建OpenCV環(huán)境的詳細(xì)步驟

    VScode搭建OpenCV環(huán)境的詳細(xì)步驟

    用vscode來(lái)寫opencv代碼需要自己編譯OpenCV,主要用到MinGW-w64和CMake工具。接下來(lái)通過(guò)本文給大家介紹VScode搭建OpenCV環(huán)境的相關(guān)知識(shí),需要的朋友可以參考下
    2021-11-11
  • C語(yǔ)言函數(shù)超詳細(xì)講解上篇

    C語(yǔ)言函數(shù)超詳細(xì)講解上篇

    函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語(yǔ)句。每個(gè)?C?程序都至少有一個(gè)函數(shù),即主函數(shù)?main()?,所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù),函數(shù)我們分兩篇來(lái)講解,接下來(lái)開(kāi)始第一篇
    2022-04-04
  • C語(yǔ)言進(jìn)階之內(nèi)存操作函數(shù)詳解

    C語(yǔ)言進(jìn)階之內(nèi)存操作函數(shù)詳解

    這篇文章主要為大家學(xué)習(xí)介紹了C語(yǔ)言中內(nèi)存操作函數(shù)(memcpy、memmove和memcmp)的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-07-07

最新評(píng)論