嵌入式學習25-復習指針要點

1指針
1.1語法:
【基類型*指針變量名】
【int *p=&a】
1
2
1.2語義:
【基類型】:指針變量指向的目標的數據類型
【*】:表示此時定義的變量是一個指針類型的變量
【&a】:一塊存放著int類型數據的空間的地址
【*p】:
通過指針間接訪問變量的過程:
(1)首先拿出p指針變量中的 值 (地址)到內存中定位找內存單元的編號
(2)從定位處開始,偏移出sizeof(基類型)大小的一塊空間(確定所需內存空間大小
(3)把這塊空間當做一個基類型的變量來看 (檢索存儲值
1
2
3
4
5
6
7
8
1.3指針變量的應用:
1.3.1在函數間傳遞信息被調函數修改主調函數的數據
1.兩步:
(1)將主調中想被修改的變量的地址傳給被調(【&】傳址)
(2)必須要做【*】運算(間接訪問),實現修改(【*】改值)
2.練習:
1:求兩個數的和
2:求兩個數中的大值,小值
1
?


3:使用指針將數組逆序
1

1.3.2用于處理數組的函數中
1.通過指針傳遞地址函數可以直接操作源數據。(效率高)
2.要注意使用【const】關鍵字保護數組中的數據
3.使用遞增遞減指針操作數組需要注意數據越界問題,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? c只保證指向數組及數組后面第一個位置的指針有效。

1.4指針相關操作
1.4.1取地址
【&】:
1
1.4.2間接訪問數據(解引用)
【*】:*運算符給出指針 指向地址上儲存的值
注意:
(1)未初始化的指針解引用的結果是未定義的(隨機值)
1
2
3
1.4.3指針與整數相加
【p+1】:地址偏移
【p-1】:如果相減的結果超出了初始指針所指向數組的范圍,計算結果是未定義的。
1
2
1.4.4遞增指針
【p++】:
【p--】:
1
2
1.4.5指針的關系運算
【>】:
【>=】:
【<】:
【<=】:
【==】:
【!=】:
1

1.4.6指針減指針
前提:兩個指針是同一類型的指針
【p-q】:表示指針之間差了幾個基類型。
【p+q】:指針不能做加法運算。

1.5指針中的優先級問題
1.【*】的優先級高于【+】。
2.【*】和【++】的優先級相同,結合性是從右至左。
3.【*】的優先級低于【[? ]】。
1
2
3
1.6指針的應用
1.6.1系統數據存儲方式(大小端)
補充:
(1)野指針:指針指向不明確,隨機;故通常將指針初始化為NULL;【NULL】:表示0號地址
(2)未初始化的指針,不要進行解引用。(值存儲的位置不明確)
(3)數組的越界指針只有一個可以進行解引用:C只能保證指向數組任意元素的指針和指向數組后面第1個位置的指針有效。
(4)指針變量的格式轉換說明:
【%p】:
【%u】:
【%lu】:
1

2指針與數組
2.1數組指針
2.1.1一維數組
【int (*p)[2];】:p指向一個內含2個【int】類型值的數組的指針。
詳解:p是一個指針,指向一個數組,該數組有兩個元素。
1
2
2.1.2二維數組
【ar[3][2]】:ar是指向數組的指針,該數組內含2個int類型的元素
1
2.2指針數組
2.1.1一維數組
【int *p[2];】:p是一個內含2個指針的數組,每個指針都指向【int】類型的元素。

2.1.2二維數組
3指針與指針
3.1
3.2二級指針
3.2.1語法
【基類型 **p;】 ? ??
基類型:指針類型
p:二級指針變量名

3.2.2語義
指向指針的指針,用于指向一個指針的地址
理解:
1.指針變量
2.指針變量的地址

【*p】:一級指針本身
【**p】:二級指針所指向的變量值
【**p=a ? ?*p=&a ? ?p=&*p】?
【**p】: 二級指針變量(p)中存放的是一級指針變量(*p)的地址(&*p)

一級指針變量(*p)中存放的是基類型變量(a)的地址(&a),基類型變量的值(**p)。
【ar[i][j]】:二級指針變量(ar)中存放的是一級指針變量(ar[i])的地址(&ar[i]),一級指針變量(ar[i])中存放的是基類型變量(a,b,c,d...)的地址(&a,&b,&c,&d...),基類型變量的值(ar[i][j]),即(a,b,c,d...)。


3.2.3二級指針的應用
(1)二級指針主要用于多級數據之間的傳遞
(2)傳遞一級指針的地址進函數,從而在函數內改變函數外一級指針的值,而一級指針的值可能為某個變量的地址
1
2
4指針與函數
5.指針與【const】
5.1一級解引用
在一級解引用的前提下:
(1)【const】限定的指針可以指向普通指針和【const】限定的指針
(2)普通指針(非【const】限定的指針)只能指向普通指針
參照:【c primer plus 第6版-10.6.2-P557】
(3)【const* p】:不能改變指向的
(4)【*const p】:不能改變指向的地址。(理解:【*p】是取值,【p】是取地址)
1

6指針的兼容性
(1)不同的指針類型不具有兼容性(如int類型的指針不能兼容double類型的指針;指向指針的指針與指向數組的指針)
(2)

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

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

相關文章

Flutter開發LongPressDraggable、Draggable 的onDragEnd沒有被調用

文章目錄 onDragEnd 什么時候執行&#xff1f;onDragEnd 在拖動結束時沒有被調用的可能原因 onDragEnd 什么時候執行&#xff1f; onDragEnd 回調函數在拖動結束時執行&#xff0c;但要注意&#xff0c;拖動結束有多種情況&#xff0c;不僅僅是松開手指觸發的。 onDragEnd 會…

【國產MCU】-CH32V307-通用定時器(GPTM)-單脈沖模式

通用定時器(GPTM)-單脈沖模式 文章目錄 通用定時器(GPTM)-單脈沖模式1、單脈沖模式介紹2、驅動API介紹3、單脈沖使用實例本文將詳細介紹如何使用CH32V307通用定時器的單脈沖模式。 1、單脈沖模式介紹 單脈沖模式可以響應一個特定的事件,在一個延遲之后產生一個脈沖,延遲…

Seata 的 AT 模式

目錄 概述 Springcloud 整合 Seata 數據庫腳本 服務依賴 Springboot 配置 代碼改造 AT模式下的數據隔離 寫隔離 讀隔離 概述 Seata 的 AT 模式是 Seata 的默認模式&#xff0c;它的原理是依賴于數據庫事務&#xff0c;以數據庫事務保證本地事務分支特性&#xff0c;結合…

windows系統用VS環境開發linux程序之一

主要有兩種方法&#xff0c;一種是在windows中安裝linux子系統&#xff0c;即WSL&#xff0c;另一種是windows系統裝linux虛擬機。 這里先用虛擬機方法。參考文章&#xff1a; 用VS2015開發Linux程序詳細教程-配置篇_vs2015可以在linux安裝嗎-CSDN博客 這篇基本就夠了。不過…

nginx之web性能location優先級

4.2 event事件 events {worker_connections 65536; #設置單個工作進程的最大并發連接數use epoll;#使用epoll事件驅動&#xff0c;Nginx支持眾多的事件驅動&#xff0c;比如:select、poll、epoll&#xff0c;只能設置在events模塊中設置。accept_mutex on; #on為同一時刻一個…

設計模式之委派模式

文章目錄 前言正文一、生活中的例子二、Java代碼實現2.1 類設計2.2 代碼實現2.2.1 Employee2.2.2 ArchitectureDesignEmployer2.2.3 BackEmployer2.2.4 FrontEmployer2.2.5 Leader2.2.6 EmployeeStrongPointEnum2.2.7 Boss 2.3 測試2.3.1 Client2.3.2 測試結果 三、委派模式的優…

Docker Desktop 4.27.1 Windows 10 安裝 教程

Docker Desktop 4.27.1 Windows 10 安裝 版本要求windows 版本要求wsl 版本要求docker desktop 版本 安裝首先確保系統版本符合要求前提下安裝wsl安裝 Dockers Desktop安裝說明 安裝問題docker Desktop 無法正常啟動&#xff0c;提示wsl 相關信息wsl --install 執行輸出幫助日志…

Python 程序中查看 Python version

Python 程序中查看 Python version 1. Code2. OutputReferences 1. Code #!/usr/bin/env python3 # -*- coding:utf-8 -*-import platform import sysprint("\nplatform.python_version():") print(platform.python_version())print("\nsys.version:") pr…

springboot大學生體質測試管理系統源碼和論文

大學生體質測試管理系統提供給用戶一個簡單方便體質測試管理信息&#xff0c;通過留言區互動更方便。本系統采用了B/S體系的結構&#xff0c;使用了java技術以及MYSQL作為后臺數據庫進行開發。系統主要分為系統管理員、教師和用戶三個部分&#xff0c;系統管理員主要功能包括首…

圖像分類入門:使用Python和Keras實現卷積神經網絡

文章標題&#xff1a;圖像分類入門&#xff1a;使用Python和Keras實現卷積神經網絡 簡介 圖像分類是計算機視覺領域的一個重要任務&#xff0c;它涉及將圖像分成不同的類別或標簽。卷積神經網絡&#xff08;CNN&#xff09;是圖像分類任務中的一種常用模型&#xff0c;它能夠…

rust實戰系列十四:復合數據類型

復合數據類型可以在其他類型的基礎上形成更復雜的組合關系。 本章介紹tuple、struct、enum等幾種復合數據類型。數組留到第6章介紹。 2.3.1 tuple tuple指的是“元組”類型&#xff0c;它通過圓括號包含一組表達式構成。tuple內的元素沒 有名字。tuple是把幾個類型組合到一起的…

第三十九天| 62.不同路徑、63. 不同路徑 II

Leetcode 62.不同路徑 題目鏈接&#xff1a;62 不同路徑 題干&#xff1a;一個機器人位于一個 m x n 網格的左上角 &#xff08;起始點在下圖中標記為 “Start” &#xff09;。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角&#xff08;在下圖中標記為 “…

c#之列表

// List<int> scoreList new List<int>();//創建空列表var scoreListnew List<int>();//匿名方式創建scoreList.Add(912);//插入數據scoreList.Add(45);scoreList.Add(415);scoreList.Add(452);scoreList.Add(4451);scoreList.Add(245);scoreList.Add(445);…

十六、多邊形填充和繪制

項目功能實現&#xff1a;對多邊形進行輪廓繪制和填充 按照之前的博文結構來&#xff0c;這里就不在贅述了 一、頭文件 mult-drawing.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class Mult_Drawing { public:void mult_drawing(); };#pragma onc…

vue如何動態加載顯示本地圖片資源

在實際開發中&#xff0c;根據某一個變量動態展示圖片的情況有很多。實現方法分打包構建工具的差異而不同。 1、webpack的項目 require引入圖片資源 2、vite的項目 new URL(url,base).href 疑問解答&#xff1a;為什么vite項目不可以用require&#xff1f; 原因在于&#xf…

Elastic Stack--01--簡介、安裝

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 1. Elastic Stack 簡介為什么要學習ESDB-Engines搜索引擎類數據庫排名常年霸榜![在這里插入圖片描述](https://img-blog.csdnimg.cn/direct/051342a83f574c8c910cda…

微信小程序獨立分包與分包預下載

官網鏈接 獨立分包配置方法 獨立分包使用限制 獨立分包中不能依賴主包和其他分包中的內容&#xff0c;包括 js 文件、模板、wxss、自定義組件等&#xff1b;App 只能在主包內定義&#xff0c;獨立分包中不能定義 App&#xff0c;會造成無法預期的行為獨立分包中暫時不支持使用…

cocos creator3.x項目打包成aar 加入到已有的Android工程

Cocos crearor版本&#xff1a; 3.4.2 Android Studio Flamingo | 2022.2.1 Patch 2 1、配置構建安卓項目 2、 運行編譯無報錯 出現問題可嘗試修改Gradle版本 修改jdk版本 3、對libservice打包成aar 打包完后 再build/outputs找到aar 如果看不到Tasks模塊&#xff0c;在Fil…

sqlserver觸發器

在SQL Server中&#xff0c;觸發器是一種特殊的數據庫對象&#xff0c;它們會在表上執行特定的操作時自動觸發。觸發器可以用于在表上插入、更新或刪除數據時執行自定義的邏輯。觸發器通常用于實施數據完整性約束、審計和日志記錄等操作。 觸發器有三種主要類型&#xff1a; 插…

人機交互新研究:MIT開發了結合腦電和眼電的新式眼鏡,與機器狗交互

還記得之前的AI讀心術嗎&#xff1f;最近&#xff0c;「心想事成」的能力再次進化&#xff0c; ——人類可以通過自己的想法直接控制機器人了&#xff01; 來自麻省理工的研究人員發表了Ddog項目&#xff0c;通過自己開發的腦機接口&#xff08;BCI&#xff09;設備&#xff…