<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
剛剛接觸指標的同學肯定會很懵逼,指標是啥啊?指南針哈哈,不和大家開玩笑,我們進行正題吧,指標是本質是就是地址,但我們要注意我們口頭上常說的指標並非指標,而是指標變數。
指標:記憶體中一個最小單元的編號,也就是地址。
指標變數:是用來存放記憶體地址的變數。
我們可以看下面的這張圖。
為了唯一標識一塊記憶體空間,在C語言中就用指標來標記,就像我們的寢室的門牌號一樣,假設張三的寢室門排號是A602,A602就是地址也就是指標,為了讓張三的寢室被人,可以找到,我們我們肯定是要在系統是登記有怎麼個寢室,下次來張三寢室也就方便,而在C語言中,就用指標變數來存放我們的地址(通常用&地址操作符來取出地址在存放在指標變數中)
#include<stdio.h> int main() { int a = 0; int* p = &a; *p = 1; return 0; }
從中我們可以看出,我們可以通過指標變數p解除參照(*),來找到a從而更改a的值。
從上面圖中我們知道在記憶體中的每一塊空間的大小都是一個位元組,那麼對一個32平臺的機器,就有32根地址線,地址線上能產生高電平(1)和低電平(0),這樣的話就能產生2的32次方個地址。
2的32次方個地址
2^32Byte == 2^32/1024KB == 2^32/1024/1024MB==2^32/1024/1024/1024GB == 4GB),4G的空閒進行編址
對於62位平臺
便有2的62地址
2^64Byte == 2^64/1024KB == 2^64/1024/1024MB==2^64/1024/1024/1024GB ==17,179,869,184GB這樣我們可以編碼的空間就會打的多。
1指標本質是地址,指標變數是用來存放地址的。
2指標在32位元平臺的大小為,4個位元組,在62位平臺為8個位元組
指標的型別,其實,和變數的型別差不多,就是變數了型別多個*號
常見的指標型別
har *pc = NULL;
int *pi = NULL;
short *ps = NULL;
long *pl = NULL;
float *pf = NULL;
double *pd = NULL;
指標的+-整數其實反應的是指標跳過的位元組,決定了指標的步長。
#include<stdio.h> int main() { int arr[5] = { 1,2,3,4,5 }; int* p = arr; printf("%dn", *p); printf("%dn", *(p + 1)); printf("%dn", *(p + 2)); return 0; }
arr指的是首元素的地址,存放在指標變數p上,我們*p就可以找到陣列的第一給元素,那麼*(p+1)指的又是上面呢,其實他指的是跳過一個4個位元組,為什麼是4個位元組而不是一個位元組呢,這就跟指標變數的型別有關係了,因為p是int*s是4個位元組,如果是char*我們+1又會發生什麼呢?
這時我們觀察到列印了0,我們*(p+4)才早的陣列的第二個元素,這是因為陣列arr中的每個元素都是4個位元組的,而char*p型別的指標加1只能跳過1個位元組,這時候找的首地址就不對了。
概念: 野指標就是指標指向的位置是不可知的(隨機的、不正確的、沒有明確限制的)
這裡雖然可以列印出6來,但這樣的存取是非法的,因為形參在出函數就會銷燬。
1. 指標初始化
2. 小心指標越界
3. 指標指向空間釋放即使置NULL
4. 避免返回區域性變數的地址
5. 指標使用之前檢查有效性
其中我們可以養成一個習慣,當我們不知道給指標初始化何值時,我們可以初始化指標為NULL(0),在對指標賦值的時候在判斷一下,就可以一定程度上避免野指標。
簡單的說就是存放一級指標的地址
圖中ppa便是二級指標變數,存的一級指標變數的地址。
存放指標的陣列,指標陣列本質是陣列。
其中的parr變是指標陣列,其中parr[10]等價於*(parr+10);
指標陣列可以模擬一個二維陣列
結構是一些值的集合,這些值稱為成員變數。結構的每個成員可以是不同型別的變數。
struct tag
{
member-list;
}variable-list;
struct:是結構體型別的關鍵字
struct tag:是使用者定義的結構體型別
member-list:是結構體成員
variable-list:結構體型別變數
其中結構的成員可以是標量、陣列、指標,甚至是其他結構體。
結構體變數的定義就是給結構體型別取一個變數。
結構體的初始化
結構體變數成員用 .存取
結構體變數指標->存取
傳參有二種,但對於結構體來說傳址呼叫是最好的,
函數傳參的時候,引數是需要壓棧的。 如果傳遞一個結構體物件的時候,結構體過大,引數壓棧的的系統開銷比較大,所以會導致效能的下降。
所以:結構體傳參的時候,要傳結構體的地址。
到此這篇關於C語言深入講解指標與結構體的使用的文章就介紹到這了,更多相關C語言指標與結構體內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45