指針變量和地址

A.指針變量和地址

??理解了內存和地址的關系,我們再回到C語?,在C語?中創建變量其實就是向內存申請空間,比如:

#include <stdio.h>
int main()
{int a = 10;return 0; }

? ?如,上述的代碼就是創建了整型變量a,內存中申請4個字節,?于存放整數10,其中每個字節都有地址,上圖中4個字節的地址分別是:

0x006FFD70
0x006FFD71
0x006FFD72
0x006FFD73

? 那我們如何能得到a的地址呢?這?就得學習?個操作符(&)-取地址操作符

#include <stdio.h>
int main()
{int a = 10;&a;//取出a的地址printf("%p\n", &a);return 0;}
? 按照我畫圖的例?,會打印處理:006FFD70,&a取出的是a所占4個字節中地址較?的字節的地址。
? 雖然整型變量占?4個字節,我們只要知道了第?個字節地址,順藤摸?訪問到4個字節的數據也是可?的。

B.指針變量

? 那我們通過取地址操作符(&)拿到的地址是?個數值,?如:0x006FFD70,這個數值有時候也是需要 存儲起來,?便后期再使?的,那我們把這樣的地址值存放在哪?呢?答案是:指針變量中。 ?如:
#include <stdio.h>
int main()
{int a = 10;int* pa = &a;//取出a的地址并存儲到指針變量pa中return 0;
}
? 指針變量也是?種變量,這種變量就是?來存放地址的,存放在指針變量中的值都會理解為地址。

C.如何拆解指針類型

??我們看到pa的類型是 int* ,我們該如何理解指針的類型呢?

int a = 10;
int * pa = &a;
? 這?pa左邊寫的是 int* * 是在說明pa是指針變量,?前?的 int 是在說明pa指向的是整型(int) 類型的對象。

? 那如果有?個char類型的變量ch,ch的地址,要放在什么類型的指針變量中呢?

char ch = 'w';
pc = &ch;//pc 的類型怎么寫呢?

D.解引用操作符

? 我們將地址保存起來,未來是要使?的,那怎么使?呢?
? 在現實?活中,我們使?地址要找到?個房間,在房間?可以拿去或者存放物品。
? C語?中其實也是?樣的,我們只要拿到了地址(指針),就可以通過地址(指針)找到地址(指針)
? 指向的對象,這?必須學習?個操作符叫解引?操作符(*)。
 #include <stdio.h>
int main()
{int a = 100;int* pa = &a;*pa = 0;return 0; }
? 上?代碼中第7?就使?了解引?操作符, *pa 的意思就是通過pa中存放的地址,找到指向的空間, *pa其實就是a變量了;所以*pa = 0,這個操作符是把a改成了0.
? 有同學肯定在想,這?如果?的就是把a改成0的話,寫成 a = 0; 不就完了,為啥?要使?指針呢?
? 其實這?是把a的修改交給了pa來操作,這樣對a的修改,就多了?種的途徑,寫代碼就會更加靈活,后期慢慢就能理解了。

E.指針變量的大小

? 前?的內容我們了解到,32位機器假設有32根地址總線,每根地址線出來的電信號轉換成數字信號后是1或者0,那我們把32根地址線產?的2進制序列當做?個地址,那么?個地址就是32個bit位,需要4個字節才能存儲。
? 如果指針變量是?來存放地址的,那么指針變的??就得是4個字節的空間才可以。

? 同理64位機器,假設有64根地址線,?個地址就是64個?進制位組成的?進制序列,存儲起來就需要8個字節的空間,指針變的??就是8個字節。

#include <stdio.h>
//指針變量的??取決于地址的??
//32位平臺下地址是32個bit位(即4個字節)
//64位平臺下地址是64個bit位(即8個字節)
int main()
{printf("%zd\n", sizeof(char *));printf("%zd\n", sizeof(short *));printf("%zd\n", sizeof(int *));printf("%zd\n", sizeof(double *));return 0; }
? 結論:
? 32位平臺下地址是32個bit位,指針變量??是4個字節
? 64位平臺下地址是64個bit位,指針變量??是8個字節
? 注意指針變量的??和類型是?關的,只要指針類型的變量,在相同的平臺下,??都是相同的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160871.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160871.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160871.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring-boot-admin-starter-server監控springboot項目

文章目錄 場景實現具體操作展示 場景 監控三件套Prometheus、Grafana、Alertmanager 部署起來太復雜,如果公司沒有運維而且項目很小就可以使用spring-boot-admin-starter-server替代。這個包使用起來還是很簡單的, 下面就實現一個對springCloud項目的監控 實現 參考 項目 具體操…

算法通關村第十二關|青銅|字符串轉換整數

1.轉換成小寫字母 原題&#xff1a;力扣709. 字符串大寫轉小寫有現成的API使用&#xff0c;但是我們也可以自己來實現。 使用或運算進行加操作能提高效率&#xff0c;因為 32 對應的二進制表示為 00100000 &#xff0c;而大寫字母的范圍 [65, 90] 的二進制表示在 00100000 的…

經典中的經典之字符串

前言&#xff1a;前段時間發燒了&#xff0c;所以耽誤了很多事情&#xff0c;一直沒有更新&#xff0c;多穿點衣服&#xff0c;感冒不好受。 接下來有時間就會陸續更新一些基礎的算法題&#xff0c;題目都很經典&#xff0c;大家可以先嘗試著做&#xff0c;再看 解析。 第一…

Windows常用cmd網絡命令詳解

中午好&#xff0c;我的網工朋友。 上回給你們梳理了一些有趣的cmd命令&#xff0c;很多朋友希望再拓展一下&#xff0c;這不就來了&#xff1f; 今天從windows切入&#xff0c;給你分享一些常用cmd網絡命令&#xff0c;如果能熟悉上手&#xff0c;很多功能都可以快速實現&am…

Java Class 類文件格式看這一篇就夠了

本文將揭開Java Class文件的神秘面紗&#xff0c;帶你了解Class文件的內部結構&#xff0c;并從Class文件結構的視角告訴你&#xff1a; 為什么Java Class字節碼文件可以“寫一次&#xff0c;遍地跑”&#xff1f;為什么常量池的計數從1開始&#xff0c;而不是和java等絕大多數…

封裝Redis工具類

基于StringRedisTemplate封裝一個緩存工具類&#xff0c;滿足下列需求&#xff1a; 方法1&#xff1a;將任意Java對象序列化為json并存儲在string類型的key中&#xff0c;并且可以設置TTL過期時間 方法2&#xff1a;將任意Java對象序列化為json并存儲在string類型的key中&…

【JVM精講與GC調優教程(概述)】

如何理解虛擬機(JVM)跨語言的平臺 java虛擬機根本不關心運行在其內部的程序到底是使用何種編程語言編寫的,他只關心“字節碼”文件。 java不是最強大的語言,但是JVN是最強大的虛擬機。 不存在內存溢出? 內存泄露? JAVA = (C++)–; 垃圾回收機制為我們打理了很多繁瑣的…

力扣刷題第二十八天--二叉樹

前言 今天的五道題都是層序遍歷的模板&#xff0c;深度優先的遞歸還不太熟。繼續努力。 內容 一、在每個樹行中找最大值 515.在每個樹行中找最大值 給定一棵二叉樹的根節點 root &#xff0c;請找出該二叉樹中每一層的最大值。 廣度優先搜素 時間復雜度&#xff1a;O(n)…

算法基礎:KMP算法詳細詳解

目錄 1、幾個最基本的概念 2、暴力算法 3、KMP算法 4、KMP代碼實現 5、時間復雜度 1、幾個最基本的概念 字符串的前綴&#xff1a; 主串&#xff08;目標串&#xff09;從索引0開始的子串被稱為主串的前綴。 字符串的后綴&#xff1a; 主串從索引大于0的位置到結尾的子串…

【人工智能入門學習資料福利】

總目錄如下&#xff08;部分截取&#xff09;&#xff1a; 百度網盤鏈接&#xff1a;https://pan.baidu.com/s/1bfDVG-xcPR3f3nfBJXxqQQ?pwdifu6 提取碼&#xff1a; ifu6

Sentinel在Spring Cloud中的流量控制與熔斷降級:保障你的微服務穩定運行

在當今高度互聯的世界中&#xff0c;微服務架構已成為構建穩健系統的基石。然而&#xff0c;隨著系統復雜性的增加&#xff0c;高并發和異常情況下&#xff0c;保障服務穩定性變得尤為關鍵。本文將帶你探索Spring Cloud中Sentinel框架的強大功能&#xff0c;它能夠為你的微服務…

協程及運用

協程 使用方法一方法二網頁下載中使用有返回值 實戰圖片實戰 一個線程多個任務&#xff0c;線程由操作系統開啟&#xff0c;比較耗資源。線程內合理分配任務&#xff0c;充分利用線程內的資源&#xff0c;一個任務io阻塞時&#xff0c;cpu處理其他非阻塞任務。 使用 方法一 i…

B站已經部分上線前臺實名,如不同意實名,后期賬號流量將收影響!

B站部分百萬粉絲博主的主頁顯示賬號運營人名字的政策是從10月31日開始的。當天&#xff0c;B站官方發布了《嗶哩嗶哩關于頭部“自媒體”賬號前臺實名的公告》&#xff0c;表明了其前臺實名制的實施計劃。 B站部分上線前臺實名的過程可以追溯到2021年。當時&#xff0c;中國政府…

window下殺指定端口進程

netstat -ano | findstr "8762" taskkill /pid 14992 /f

【LeetCode】144. 二叉樹的前序遍歷

144. 二叉樹的前序遍歷 難度&#xff1a;簡單 題目 給你二叉樹的根節點 root &#xff0c;返回它節點值的 前序 遍歷。 示例 1&#xff1a; 輸入&#xff1a;root [1,null,2,3] 輸出&#xff1a;[1,2,3]示例 2&#xff1a; 輸入&#xff1a;root [] 輸出&#xff1a;[]…

ARM裸機-18(SD卡啟動)

1、主流的外存設備介紹 內存和外存的區別&#xff1a;一般是把這種RAM(random access memory&#xff0c;隨機訪問存儲器&#xff0c;特點是任意字節讀寫&#xff0c;掉電丟失)叫內存&#xff0c;把ROM (read only memory&#xff0c;只讀存儲器&#xff0c;類似于Flash、SD卡之…

如何解決安卓手機無法預覽pdf文件而是需要直接下載的問題

在開發中常常會遇到需要在一個應用里打開一份pdf文件并預覽&#xff0c;經真機調試時發現在蘋果手機上打開pdf文件能正常預覽&#xff0c;但在安卓手機打開時卻會需要我們下載才能預覽&#xff0c;無法直接預覽 為了解決這個問題&#xff0c;我們采用安裝pdfH5插件的方式&…

計算機三級嵌入式知識總結(一)

一、ARM的七種異常類型 1、復位異常RESET “復位異常RESET”通常是指在電子設備或系統中發生了一個意外的復位或重啟。這可能是由于硬件故障、軟件問題或其他未知的原因引起的。當設備經歷復位異常時&#xff0c;它可能會丟失正在進行的操作或設置&#xff0c;導致數據丟失或系…

LINUXZ

10.6.2 AT24C02 訪問方法 設備地址 從芯片手冊上可以知道&#xff0c;AT24C02 的設備地址跟它的 A2、A1、A0 引腳有關&#xff1a; 圖 10.36 AT24C02 設備地址引腳配置 294 / 577 打開 I2C 模塊的原理圖&#xff1a; 開發板配套網盤資料\04_開發板原理圖\ 04_Extend_modules\通…

SQL語句執行過程

一條 SQL 的執行過程可以大致分為以下幾個步驟&#xff1a; 連接器&#xff1a; ○ 客戶端與數據庫建立連接&#xff0c;并發送 SQL 語句給數據庫服務。 ○ 連接器驗證客戶端的身份和權限&#xff0c;確保用戶有足夠的權限執行該 SQL 語句。查詢緩存&#xff1a; ○ 連接器首先…