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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

关于二维数组取地址加以或减一解引用问题

發布時間:2025/3/11 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于二维数组取地址加以或减一解引用问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
int main() { int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int *ptr1 = (int *)(&aa + 1); int *ptr2 = (int *)(*(aa + 1)); printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));system("pause");return 0; }

很顯然aa是一個二維數組,很多人把二維數組抽象的理解成一個矩陣,如

[1,2,3,4,5], [6,7,8,9,10],

不能說這是錯誤,這種思維不利于對二維數組更好地理解,那我們該怎么理解呢?維度是空間的一個概念,我們可以抽象的理解為二維空間是由一維空間組成,三維空間是由二維空間組成,同理,二維數組,其實是由多個一維數組組成的,這個二維數組是兩行五列,就是說這個二維數組是由2個元素個數為5的一維數組組成,設這兩個一維數組為b[5],c[5],令b[5]={1,2,3,4,5},c[5]={6,7,8,9,10}。接下來開始分析代碼:

int *ptr1 = (int *)(&aa + 1);

這個&aa+1怎么理解呢?&aa指二維數組aa的地址,&aa+1就是指向下一個數組的首地址(在這里我們可以形象的理解為元素aa[2][5]的地址,很顯然aa[2][5]已經越界了,這里只是便于理解而特殊引用的),然后將其進行int*強制轉換賦給ptr1。

int *ptr2 = (int *)(*(aa + 1));

aa在單獨使用時代表數組aa的首地址,加一表示首地址加一,即指向下一個元素地址,即第二個元素地址(即c[5]的地址,同樣代表c[0]地址),再將其解引用后強制轉換為int*型賦給ptr2。

printf("%d,%d", *(ptr1 - 1),*(ptr2 - 1));

ptr1-1就表示下一個數組首元素aa[2][5]的前一個元素的地址,即本數組最后一個元素aa[2][4]的地址,解引用后就是10;ptr2表示c[5]的地址,也是c[0]的地址,減一表示指向前一個數組最后一個元素的地址,即b[4]的地址,解引用后就是5。

總結

以上是生活随笔為你收集整理的关于二维数组取地址加以或减一解引用问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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