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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

二级指针和二维数组

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二级指针和二维数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

c語言中的指針我相信很多人都被整懵b過,尤其二級指針和二維數組那塊根本不知道指向的是哪些值,我最近也是學了這些個二維數組和二級指針的關系,也就是懂點皮毛,順便加深一下這方面的知識來淺談一下,如有錯誤,必定虛心求教!

首先一級指針和一維數組的關系:
?

#include<stdio.h>
int main() 
{int ar[3] = {1,2,3};int* arp = ar;return 0;
}

vs中調出監視窗口

va

一維數組的數組名代表的是數組首元素的地址?

還需要注意的一個點就是說指針中*(arp+1) = *arp+1? 這是因為地址常量可以退化成對應的指針

當然你也可以查出數組中其他值的地址

相鄰兩數值之間相隔4,這是由于類型是int型的,

int 型指針+1:地址+4
short型指針+1:地址+2
char型指針+1:地址+1

二維數組與二級指針

顧名思義就是若干個一維數組組合到一起。

#include<stdio.h>
int main() 
{int ar[3][3] = { 1,2,3,4,5,6,7,8,9 };int (*arp)[3] = &ar;return 0;
}

vs調出監視窗口

?

?

?

?這個中相當于什么東西呢,和一維指針一樣數組名等于首元素的地址,但是二維數組中的首元素是ar[0]這一行的數組,所以二維數組ar這個數組名代表ar[0]這一行數組的首地址。

關于二維數組指針代碼的書寫

#include<stdio.h>
int main() 
{int ar[3][3] = { 1,2,3,4,5,6,7,8,9 };int *(arp)[3] = ar;            return 0;
}

以上代碼塊為正確的代碼塊,而錯誤的代碼塊這樣寫:

#include<stdio.h>
int main() 
{int ar[3][3] = { 1,2,3,4,5,6,7,8,9 };int *arp = ar;    //因為ar是二維數組,二維數組首地址是一個數組,所以必須寫成*(arp)[3]return 0;         //該代碼為錯誤代碼
}

#include<stdio.h>
int main() 
{int br[3] = {1,2,3};int *s = br;       //數組名相當于數組首地址int (*sbr)[3] = &br; //首地址取地址int ar[3][3] = { 1,2,3,4,5,6,7,8,9 };int (*p)[3] = ar;int (*arp)[3][3] = &ar;   //首地址取地址return 0;
}

上面說到的首地址取地址結果如下(如果顯示的不是下圖這種格式的胡,右鍵數據以16進制打開即可)

?最后再拿出我們老師的一道例題

#include<stdio.h>
int main()
{int ar[5][2]= { 1,2,3,4,5,6,7,8,9,10 } ;int(*p)[2] = &ar[1];int* s = ar[1];printf ("%d \n", p[1][3]);printf ("%d \n", s[3]) ;return 0;
}
int(*p)[2] = &ar[1];  //對它進行解引用
int(*p)[2] = &*(ar+1);  //然后&和*相互抵消  即為ar+1
//其中int(*p)[2]的意思為無論這個二維數組有幾行,它有兩列
//然后數組是ar[5][2] = {1,2,3,4,5,6,7,8,9,10}   ar+1即為加到第二行數組的首地址//然后p[1][3] ---->   *(p[1]+3)  ------>    *(*(p+1)+3)  即為指向數字8的首地址  則打印出來為8//int *s = ar[1]   直接就是int s = *(ar + 1)    則s指向首地址為3的數組
//然后s[3] = *(s+3)  則s[3]的值為3向前加三個元素,為6

對了:

**a相當于a[][]、也相當于*a[]
*(*(a[+1])+2)相當于a[1][2]
指針其實就是內存地址、*a就是內存地址的數據
而數組名就是數組的首地址

[doge]!

總結

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

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