指針,指針變量,引用,取地址符,malloce()函數使用,C中“—>” 和“ . ” 作用與區別

目錄

一:指針,指針變量,引用,取地址符:

前提 :

1.“ * ” 的兩種用途

2." & “的兩種用途

2.1:引用

2.2:取地址

補充:

二 : malloc(),動態申請地址空間

1.原型定義 void *malloc(int size);

補充:

三:—> 和 . 作用 區別

1.作用:

2.理解:


一:指針,指針變量,引用,取地址符:

  • 符號“ * ” 和 指針變量

  • int *p; #這個代碼的含義是: 創建一個指針變量:p, p是一個指針變量,而p前面的 “ * ” 是在聲明p是一個指針變量

  • *p ; #這個代碼的含義是:解引用 指針變量p (取出指針變量所存的地址中的內容)

  • int &q; #這個代碼的含義是: 創建一個地址變量:q, q是一個地址變量,而q前面的 “ &?” 是在聲明q是一個地址變量

  • &q; #這個代碼的含義是:取地址, 取出變量q的地址 (取出指針變量所存的地址中的內容)

前提

  • int e = 10;

  • int a = 5;

1.“ * ” 的兩種用途

  • 1.1:解引用:返回指針所指對象的值

  • 使用場景: 想要修改指針變量指向地址內容的值時,使用解引用

  • int *p=&a;

  • *p = 50; //此處相當于將 a中內容修改成50;

  • 1.2:聲明指針變量:表面該變量是指針變量

  • 場景一:

  • int *p;

  • 場景二:在形參聲明指針

  • void test1(int* q) {

  • }

  • void main1(){

  • test1(p) ;

  • }

  • 當main函數調用test函數時,test1函數空間會開辟一塊新的內存空間,并且創建一個指針變量q,并且將p指針的內容 存放到q指針中(p,q是單獨存在的兩個指針,知識他們存儲的內容是一樣的;)

2." & “的兩種用途

2.1:引用
  • 場景一:聲明引用變量

  • int &r = a; #將r 作為a的別名 和 a 一樣(但是不能修改引用)

  • 例如 r = 6 : #實質是 先將 a修改成6 然后r的引用也變為6

  • 場景二:函數形參聲明 引用變量

  • void test2(參數類型 &y)

  • void main(){

  • test(a); // 相當于 將y作為a的別名,當在test2中 修改y時,實質上的操作是:先修改了a,然后同時 y 的引用也指向 新的 a。

  • }

  • 場景三:指針類型 和 引用 同時出現在形參位置

  • void test2(參數類型* &y) //此處表示,一個指針變量y ,將會成為 調用test2 時,傳遞過來參數的引用

  • void main(){

  • int *p=&a;//聲明一個指針變量p,并且將 a的地址賦給p;

  • test2(p);

  • }

  • 當main函數調用test函數時,test1函數空間會開辟一塊新的內存空間,并且創建一個指針變量y,此時指針變量y?和 p 是同一個指針,q是p的別名(引用))

2.2:取地址
  • p = &a;

  • int *q = &a;

  • q = &e;//取出e的地址 賦值給指針變量q

  • printf(“%d”,*q);

  • // 10

  • 上述操作 當輸出*p 結果應該是 e,但這并不意味著修改了 變量a ,這只是僅僅將指針變量p內的存儲內容從a的地址改為e的地址

補充

1: int* p,q; 和 int *p,q; //表達相同含義 等價 int *p;int q;

2.二級指針:int "* *p" ; //表示 p是一個二級指針,p存儲的是一個一級指針的地址

“ * * p ” //表示 二級解引用,**p 的值 是 p內存儲一級指針所存儲的地址內存儲的數

舉例: int a = 5;

int *p = &a;

int **q?= &p;

print(q)

// 輸出p的地址

print(*q)

//輸出a的地址

print(**q)

//輸出 a

二 : malloc(),動態申請地址空間

1.原型定義 void *malloc(int size);

malloc()使用 : (數據類型*)malloc(sizeof(數據類型)*申請數據數量)

malloc()返回值: malloc()返回開辟出內存空間的首地址

補充:

1.由malloc定義,其返回對象是指針類型,只能被指針變量接收

2.malloc申請空間使用完成后 需要free(),且free收到參數必須是調用malloc()時?malloc返回的地址空間首地址;

三:—> 和 . 作用 區別

1.作用:

  • A.B 則 A為對象或者結構體; 點號(.):左邊必須為實體。

  • A->B則A為指針,->是成員提取,A->B是提取(*A)中的成員B,A只能是指向類、結構、聯合的指針; 箭頭(->):左邊必須為指針;

    補充:聯合體(union) 參考文章:C 語言中的結構體和共用體(聯合體) | 彬彬的博客 (kangzubin.com) 中第二部分

    img

2.理解:

s.member 等價于 (&s)->member (*p).member 即是 p->member (p->member 等價于(*p).member )

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

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

相關文章

Dubbo生態之初識dubbo協議

1.RPC框架 在java的發展中,隨著業務的越來越龐大,單體架構的工作繁瑣且耦合度高,因此單體架構過渡到了分布式架構,而分布式架構就必然涉及到各個服務之間的遠程通信(RPC框架),RPC框架如圖所示: 工作流程: a.客戶端調…

查看當前Shell系統環境變量

查看當前Shell系統環境變量 查看命令 env效果 查看Shell變量(系統環境變量自定義變量函數) 命令 set效果 常用系統環境變量 變量名稱含義PATH與windows環境變量PATH功能一樣,設置命令的搜索路徑,以冒號為分割HOME當前用戶主目錄:/rootSH…

有道:一季度業績超市場預期,生成式AI商業化落地進程加快

5月23日,教育科技公司網易有道(NYSE:DAO)公布了2024年第一季度未經審計的財務報告。報告期內,受益于“AI”加“教育”雙輪驅動,業績表現超市場預期,業務健康度大幅改善。 財報顯示,…

5.23小結

1.java項目創新 目前想添加一個自動回復的功能和設置驗證方式有(允許任何人添加,禁止添加,設置回答問題添加,普通驗證添加) 目前只完成畫好前端界面,前端發送請求,還有表的修改 因為涉及表字…

leetcode 210.課程表II

思路:拓補排序 其實就是對于第一個題的問題變了一個問法,上一個題本質上是求有沒有環,這道題本質上就是讓你求出來符合沒有環的路徑輸出而已,本質上沒有什么區別。 不同就在于這里需要你額外開一個數組用來存儲你遍歷這個有向圖…

大語言模型量化方法對比:GPTQ、GGUF、AWQ 包括顯存和速度

GPTQ: Post-Training Quantization for GPT Models GPTQ是一種4位量化的訓練后量化(PTQ)方法,主要關注GPU推理和性能。 該方法背后的思想是,嘗試通過最小化該權重的均方誤差將所有權重壓縮到4位。在推理過程中,它將動態地將其權重去量化為f…

nn.Linear

文章目錄 一、nn.Linear 一、nn.Linear nn.Linear 是 PyTorch 中的一個類,用于定義線性變換(全連接層)。它是神經網絡中常用的一種層類型,作為輸入張量與權重矩陣之間的線性變換。 nn.Linear(in_features, out_features, biasTru…

決策樹最優屬性選擇

本文以西瓜數據集為例演示決策樹使用信息增益選擇最優劃分屬性的過程 西瓜數據集下載:傳送門 首先計算根節點的信息熵: 數據集分為好瓜、壞瓜,所以|y|2根結點包含17個訓練樣例,其中好瓜共計8個樣例,所占比例為8/17壞…

2024-5-4-從0到1手寫配置中心Config之基于h2的config-server

添加依賴 新建的web工程中添加h2的依賴 添加h2的配置 設置數據源和密碼設置初始化sql語句打開h2的控制臺 初始化語句創建一個config表,保存服務配置信息。 完成CRUD接口 controller類 mapper接口 測試 在web控制臺可以看到sql已經初始化完成,crud接口…

前端基礎入門三大核心之HTML篇:深入解析PNG8、PNG16、PNG24與PNG32的差異及網頁應用指南

前端基礎入門三大核心之HTML篇:深入解析PNG8、PNG16、PNG24與PNG32的差異及網頁應用指南 基礎概念與作用說明PNG8PNG16PNG24PNG32 代碼示例與使用場景PNG8示例PNG24示例PNG32示例 性能優化與最佳實踐防范漏洞提示結語與討論 在網頁設計與前端開發中,選擇…

PLC工程師按這個等級劃分是否靠譜?

在工業自動化領域,PLC工程師扮演著至關重要的角色,他們負責構建、維護自動化系統,推動工業4.0進程的發展。成為一名優秀的PLC工程師需要經歷不同境界的發展階段,每個階段都對應著不同的技能要求和責任。以下是PLC工程師的六種級別…

Kotlin協程在android中的使用總結

認識協程 引用官方的一段話 協程通過將復雜性放入庫來簡化異步編程。程序的邏輯可以在協程中順序地表達,而底層庫會為我們解決其異步性。該庫可以將用戶代碼的相關部分包裝為回調、訂閱相關事件、在不同線程(甚至不同機器!)上調度…

JDK、JRE、編譯指令和垃圾回收機制詳解

JDK 全稱 Java SE Development Kit (Java 開發工具包) JVM虛擬機:Java運行的地方 核心類庫:Java提前編好的東西 開發工具: javac,java,jdb,jhat javac:Java編譯器,用于將Java源代碼編譯成Java字節碼文件(.class)。 java: java…

[STM32-HAL庫]AS608-指紋識別模塊-STM32CUBEMX開發-HAL庫開發系列-主控STM32F103C8T6

目錄 一、前言 二、詳細步驟 1.光學指紋模塊 2.配置STM32CUBEMX 3.程序設計 3.1 輸出重定向 3.2 導入AS608庫 3.3 更改端口宏定義 3.4 添加中斷處理部分 3.5 初始化AS608 3.6 函數總覽 3.7 錄入指紋 3.8 驗證指紋 3.9 刪除指紋 3.10 清空指紋庫 三、總結及資源 一、前言 …

[力扣題解] 797. 所有可能的路徑

題目&#xff1a;797. 所有可能的路徑 思路 深度搜索 代碼 // 圖論哦!class Solution { private:vector<vector<int>> result;vector<int> path;// x : 當前節點void function(vector<vector<int>>& graph, int x){int i;// cout <&l…

解決鼠標滾動時element-ui日期選擇器錯位的問題

解決方案&#xff1a;監聽鼠標滾動事件&#xff0c;在鼠標滾動時隱藏element-ui日期選擇器下拉框 1、先在util文件夾下創建個hidePicker.js文件&#xff0c;代碼如下&#xff1a; let el nullconst fakeClickOutSide () > {const SELECTWRAP_BODY document.body // bod…

Day37 貪心算法part04

LC860檸檬水找零(未掌握) 未掌握分析&#xff1a;20的時候找零卡住&#xff0c;同時貪心思路就想了很久 當bill[i]20的時候&#xff0c;我們有兩種找零范式&#xff0c;找零10、5和找零三個5&#xff0c;優先找零10、5&#xff0c;因為三個5是可以替代10、5的情況的&#xff0…

Nebula街機模擬器 Mac移植版(400+游戲roms)漢化版

nebula星云模擬器是電腦上最熱門的街機游戲模擬器之一&#xff0c;玩家可以通過這個小巧的模擬器軟件進行多款經典街機游戲啟動和暢玩&#xff0c;本次移植的包含400多款游戲roms&#xff0c;經典的三國志、三國戰紀、拳皇、街霸、合金彈頭、1941都包含在內。 下載地址&#xf…

CompletableFuture的主要用途是什么?

CompletableFuture 的主要用途是為復雜的異步編程模型提供一種更簡單&#xff0c;更具可讀性的方式。它主要用于以下幾個方面&#xff1a; 非阻塞計算&#xff1a;CompletableFuture 為處理高延遲的計算任務提供了非阻塞的解決方案。你可以啟動一個計算任務&#xff0c;而不需要…

前端 CSS 經典:好看的標題動畫

前言&#xff1a;好看的標題動畫實現。 效果&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><…