c语言数组与指针的基础知识,C语言学习笔记之数组与指针的关系
首先,大家先需知道一個關于基類型的概念
基類型:組成一個新類型的基礎類型
這句話是什么意思呢?舉個例子:
int a[3] = {1,2,3};
上面是由三個int類型的數組成一個新的類型也就是數組,所以基類型是int
int a[2][2] = {{1,2},{3,4}};
上面是由兩個一維數組類型組成一個二維數組,所以基類型是一維數組
有了上面兩個例子,相信大家能知道基類型是啥意思。
接下來先說說一維數組和一級指針關系
首先指針說白了就是存放地址,把變量地址賦予指針
取出該變量的數值應該用*號取出指針所指變量地址里面的值,如下
如果我們想把一個數組的地址賦值給指針,如下
程序里的a表達的是數組的首地址,則我們可以得到int *p = a的關系
如果我們想輸出數組第二個元素的地址呢,是不是得把指向首地址的指針移到數組第二個數的地址
指針p存儲首地址,也就是指向數組的第一個元素,+1后相當于指向數組第二個元素,指針往右移動1個基類型,也就是一個int型長度,所以地址與首地址相差4個字節,因為int數據類型長度為4個字節。
我們用 * 號取后數值為1,說明正是指向數組第二個元素。
突發奇想,指針 p = a,那我可以把p改作a執行上面操作嗎?
想法被確定了,在某種情況下,數組的確和指針用法一樣。
接下來是二維數組和數組指針關系
數組指針:本質是個指針, 指向 數組的指針
有人可能會問,那可以指向一維數組嗎,先不說,看到下面應該就能理解
可以看出,p存放二維數組首地址,如果我們想要到a[1][0]的地址呢
指針p存儲首地址,上面我們已經說過二維數組由一維數組構成,基類型為一維數組,+1后相當于指向二維數組第二個元素也就是第二個一維數組,指針往右移動1個基類型,也就是一個一維數組型長度(包含兩個int型),所以地址與首地址相差8個字節。
如果想要a[1][0]的數值呢
有人可能會被不知道為什么需要兩個 * 號才能取出數值
這是因為我們一開始時p+1只是指針移動一個基類型,也就是移到二維數組的第二個一維數組一整個中,可是別忘記他的元素是一維數組,沒有*之前我們還只是在二維數組中,我們 *{p+1}才是進入一維數組里面,然后接下來就和一級指針一樣的操作,再多個*就可以把數值取出:*(*(p+1))
如果要取a[1][1]的地址和值呢
為什么在第一個 * 號后+1呢
因為當我們*(p+1)進入二維數組中第二個一維數組里面后,我們如果想取它一維數組第二個元素的int值,是不是和上面一維數組和一級指針一樣,+1就可移動到第二個int,這里(*p+1)+1后面+1移動的是int的基類型,前面的+1移動的是一維數組的基類型,則取出a[1][1] 則需要(*(*p+1)+1) 。
看到這里希望大家明白為什么前面說的數組指針不能指向一維數組以及二維數組和數組指針關系
總結:一維數組和一級指針:
int a[5];
int *p = a;
二維數組和數組指針的關系:
int a[2][2];
int (*p)[2]; ? ?注意數組指針和二維數組后面的[2]必須相同。
標簽:數組,int,二維,筆記,C語言,地址,一維,指針
來源: https://www.cnblogs.com/xzc943/p/13399288.html
總結
以上是生活随笔為你收集整理的c语言数组与指针的基础知识,C语言学习笔记之数组与指针的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gta5银行在哪
- 下一篇: 迷宫游戏c语言代码讲解,迷宫游戏C语言代