指針的定義與使用

1.指針的定義和使用

int point1(){//定義指針int a = 10;//指針定義語法: 數據類型 * 指針變量名int * p;cout << "sizeof (int(*)) --> " << sizeof(p) << endl;//讓指針記錄變量a的地址 & 取址符p = &a ;cout << "指針p為:" << p << endl;cout << "變量a的地址為:" << &a << endl;cout << "變量a的值為:" << a << endl;/*** 使用指針 通過<br>解引用</br>的方式來找到指針指向的內存* 指針前加 * 代表解引用,找到指針指向的內存中的地址*/*p = 500;int b = *p;cout << "變量b的值為:" << b << endl;cout << "變量a的值為:" << a << endl;cout << "*p的值為:" << *p << endl;cout << "變量a的地址為:" << &a << endl;cout << "變量b的地址為:" << &b << endl;}輸出:sizeof (int(*)) --> 8指針p為:0x16ae5f738
變量a的地址為:0x16ae5f738
變量a的值為:10變量b的值為:500
變量a的值為:500
*p的值為:500
變量a的地址為:0x16ae5f738
變量b的地址為:0x16ae5f72c

2.指針常量和常量指針

指針常量?
?特點:指針的指向不能改,指針指向的值可以改 (內存地址不會變,但是內存地址指向的值會改變)
	int a = 20;int b = 30;cout << "變量a的值:" << a << endl;cout << "變量a的地址:" << &a << endl;//指針常量 特點:指針的指向不能改,指針指向的值可以改 (內存地址不會變,但是內存地址指向的值會改變)int * const p1 = &a;cout << "指針p:" << p1 << endl; //輸出的地址cout << "指針p:" << *p1 << endl; // 輸出地址指向的值// p1 = &b; //報錯,*p1 = 50;cout << "指針p:" << p1 << endl; //輸出的地址cout << "指針p:" << *p1 << endl; // 輸出地址指向的值輸出:變量a的值:20
變量a的地址:0x16b303738
指針p:0x16b303738
指針p:20
指針p:0x16b303738
指針p:50
常量指針?
特點: 指針的指向可以改,但是指針指向的值不可以改
	int a = 50;int b = 30;		//常量指針 特點: 指針的指向可以改,但是指針指向的值不可以改const int * p2  = &a;cout << "變量a的值:" << a << endl;cout << "變量a的地址:" << &a << endl;cout << "指針p2:" << p2 << endl;cout << "指針p2指向的值:" << *p2 << endl;//*p2 = 100;  //報錯p2 = &b;cout << "變量a的值:" << a << endl;cout << "變量a的地址:" << &a << endl;cout << "變量b的值:" << b << endl;cout << "變量b的地址:" << &b << endl;cout << "指針p2:" << p2 << endl;cout << "指針p2指向的值:" << *p2 << endl;輸出:變量a的值:50
變量a的地址:0x16b06b738
指針p2:0x16b06b738
指針p2指向的值:50
變量a的值:50
變量a的地址:0x16b06b738
變量b的值:30
變量b的地址:0x16b06b734
指針p2:0x16b06b734 
指針p2指向的值:30

?3.指針數組 --》 是一個數組

指針數組 -- 存放指針的數組

int* arr[3]; // 整形指針的數組

char* arr1[10]; // 字符型指針的數組

4.數組指針 --》 是一個指針

int main()
{int* p = NULL; // p是整形指針 -- 指向整形的指針 -- 存放整形的地址char* pc = NULL; // pc是字符指針 -- 指向字符的指針 -- 存放字符的地址// 數組指針 -- 是不是指向數組的指針? -- 存放數組的地址int arr[10] = {0,6,0};printf("數組首元素地址 %p \n",arr);printf("數組首元素地址 %p \n",&arr[0]);printf("整個數組的地址 %p \n",&arr);// 如何存放數組地址呢? &arr 指向整個數組的指針// 想讓 parr 指向整個數組(而不僅僅是第一個元素),你需要聲明 parr 為 int (*)[10] 類型的指針。int (*parr)[10] = &arr;printf("parr %p\n",parr);printf("Second element: %d\n", (*parr)[1]);  // 通過數組指針訪問第二個元素char pch[10] = {'w','c'};char (*pch1)[10] = &pch;printf("Second element: %c\n", (*pch1)[1]);  // 通過數組指針訪問第二個元素// 定義一個字符型指針數組char* pc1[10];// 字符指針的地址又該如何存放呢?char* (*pa)[10] = &pc1;}

下面代碼哪個是數組指針?

Int* p1[10]; // 存放指針的數組

Int (*p2)[10]; // 存放數組地址的指針

?

    int arr5[10] = {1,2,3,4,5,6,7,8,9,10};int (*arr5_2)[10] = &arr5;for (int i = 0; i < 10; i++) {printf("%d ",(*arr5_2)[i]); // 不太容易理解}printf("\n");// 第二種寫法for (int i = 0; i < 10; i++) {// *arr5_2 == arr5 ==> 首元素的地址 ==》 arr5_2+i 即表示指針向右移動printf("%d ",*(*arr5_2+i));}printf("\n");

5.函數指針 --》 指向函數的指針?

estimate 函數接受一個整數 lines 和一個指向函數的指針 pf,這個函數指針指向一個接受 int 類型參數并返回 double 的函數。

// 函數示例,符合 estimate 的要求
double myFunction(int x) {return x * 1.5;
}void estimate(int lines,double (*pf)(int))
{cout << (*pf)(lines) << endl;  // 調用函數指針 pf
}

estimate 函數內部,(*pf)(lines) 用于調用函數指針 pf,并將 lines 作為參數傳遞給它。

*pf 是一個函數指針的解引用操作。pf 是一個指向函數的指針,*pf 解引用這個指針,得到指向的函數。

例如,如果 pfdouble (*pf)(int) 類型的函數指針,那么 *pf 是一個函數,其參數是 int,返回值是 double。你可以用 (*pf)(args) 來調用這個函數,傳遞參數 args

5.1聲明函數指針

函數指針是指向函數的指針,允許你通過指針來調用函數。

// 函數聲明
void printMessage();
void anotherFunction();// 函數定義
void printMessage() {
std::cout << "Hello, World!" << std::endl;
}void anotherFunction() {
std::cout << "This is another function." << std::endl;
}// 定義一個函數指針,指向返回類型為 void、參數為無的函數
void (*funcPtr)();// 指向 printMessage 函數
funcPtr = printMessage;
(*funcPtr)(); // 調用 printMessage// 指向 anotherFunction 函數
funcPtr = anotherFunction;
(*funcPtr)(); // 調用 anotherFunction// ------------------
// 第一種寫法
typedef int (*ptr1)(int,int);int Add(int a,int b)
{int c = a + b;printf("result is %d\n",c);
}// 一個函數,接受一個整數和一個回調函數
void process(int value1, int value2,ptr1 callback) {// 對值進行某種處理value1 *= 2;value2 *= 2;// 調用回調函數callback(value1,value2);
}process(5,7,Add);// 第二種寫法// 指向函數的指針,用于指向一個接受兩個 int 參數并返回 int 的函數(例如 Add 函數)int (*ptr1)(int,int);// 將函數指針指向 Add 函數ptr1 = Add;// 通過函數指針調用 Add 函數ptr1(5,6);

聲明指向某種數據類型的指針時,必須指定指針指向的類型。同時,聲明指向函數的指針時,也必須指定指針指向的函數類型。這意味著聲明應指定函數的返回類型以及函數的特征標(參數列表)。也就是說,聲明應像函數原型那樣指出有關函數的信息。例如,假設Pam leCoder編寫一個估算時間的函數,其原型如下:

double pam(int)

則正確的指針類型聲明如下:

double (*pf)(int)

這與pam()聲明類似,這是將pam替換成了(*pf)。由于pam是函數,因此( *pf)也是函數,而如果( *pf)是函數,則pf就是函數指針

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

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

相關文章

Git開發實戰

本文對開發中git的常用概念和操作做一個總結。參考綠毛鴨子的部分內容。 git分布式的體現 1.本地完整的版本庫&#xff1a; 每個克隆下來的 Git 倉庫都包含了項目的所有歷史記錄、提交、分支等信息。這意味著每個開發者的本地倉庫是一個完整的版本控制系統&#xff0c;包括…

ingress-nginx 開啟 Prometheus 監控 + Grafana 查看指標

環境已經部署了 ingress-nginx&#xff08;DaemonSet 方式&#xff09;&#xff0c;并且 Prometheus Grafana 也已經運行。但之前 /metrics 端點沒有暴露 Nginx 核心指標&#xff08;如 nginx_ingress_controller_requests_total&#xff09;&#xff0c;經過調整后現在可以正…

ThinkPHP 5.1 中的 error 和 success 方法詳解

1、success() 方法 public function someAction() {// 操作成功邏輯...return $this->success(操作成功, 跳轉地址, 額外數據); } 參數說明 參數類型說明默認值msgstring成功提示信息空字符串urlstring跳轉URLnull (不跳轉)datamixed返回的額外數據nullwaitinteger跳轉等…

抗輻照MCU在衛星載荷電機控制器中的實踐探索

摘要:在航天領域&#xff0c;衛星系統的可靠運行對電子元件的抗輻照性能提出了嚴苛要求。微控制單元&#xff08;MCU&#xff09;作為衛星載荷電機控制器的核心部件&#xff0c;其穩定性與可靠性直接關系到衛星任務的成敗。本文聚焦抗輻照MCU在衛星載荷電機控制器中的應用實踐&…

計算機視覺——相機標定

計算機視覺——相機標定 一、像素坐標系、圖像坐標系、相機坐標系、世界坐標系二、坐標系變換圖像坐標系 → 像素坐標系相機坐標系 → 圖像坐標系世界坐標系 → 相機坐標系 ? \star ? 世界坐標系 → 像素坐標系 三、相機標定 一、像素坐標系、圖像坐標系、相機坐標系、世界坐…

好未來0520上機考試題1:括號的最大嵌入深度

題目 &#xff08;LeetCode 1614.括號的最大嵌入深度&#xff09; 給定 有效括號字符串 s&#xff0c;返回 s 的嵌套深度。嵌套深度是嵌套括號的最大數量。 示例 1&#xff1a; 輸入&#xff1a;s "(1(2*3)((8)/4))1" 輸出&#xff1a;3 解釋&#xff1a;數字…

MySQL復雜SQL(多表聯查/子查詢)詳細講解

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 MySQL復雜SQL&#xff08;多表聯查/子查詢&a…

Spring中循環依賴問題的解決機制總結

一、解決機制 1. 什么是循環依賴 循環依賴是指兩個或多個Bean之間相互依賴對方&#xff0c;形成一個閉環的依賴關系。最常見的情況是當Bean A依賴Bean B&#xff0c;而Bean B又依賴Bean A時&#xff0c;就形成了循環依賴。在Spring容器初始化過程中&#xff0c;如果不加以特殊…

集運維_安裝linux,麒麟等系統_步驟

u盤工具選擇Ventoy,Rufus 在選擇Ventoy和Rufus這兩款U盤啟動盤制作工具時,需根據具體需求權衡其優缺點: ?核心差異? ?多系統支持?: ?Ventoy?:支持將多個ISO、WIM、IMG等類型的鏡像文件直接復制到U盤,實現?一盤多用?(例如同時存放Windows、Linux等鏡像),無需…

第4章:Cypher查詢語言基礎

Cypher是Neo4j的聲明式圖查詢語言&#xff0c;專為處理圖數據而設計。它允許用戶以直觀、高效的方式查詢和修改圖數據庫中的數據。本章將介紹Cypher的基本概念和語法&#xff0c;幫助讀者掌握使用Cypher進行基礎圖數據操作的能力。 4.1 Cypher語言概述 Cypher是Neo4j的主要查…

上位機知識篇---Flask框架實現Web服務

本文將簡單介紹Web 服務與前端顯示部分,它們基于Flask 框架和HTML/CSS/JavaScript實現,主要負責將實時視頻流和檢測結果通過網頁展示,并提供交互式狀態監控。以下是詳細技術解析: 一、Flask Web 服務架構 1. 核心路由設計 @app.route(/) def index():"""…

Neovim - 打造一款屬于自己的編輯器(一)

文章目錄 前言&#xff08;勸退&#xff09;neovim 安裝neovim 配置配置文件位置第一個 hello world 代碼拆分 neovim 配置正式配置 neovim基礎配置自定義鍵位Lazy 插件管理器配置tokyonight 插件配置BufferLine 插件配置自動補全括號 / 引號 插件配置 前言&#xff08;勸退&am…

按字典序排列最小的等效字符串

文章目錄 題目思路解題過程Python代碼C代碼復雜度 題目 給出長度相同的兩個字符串s1 和 s2 &#xff0c;還有一個字符串 baseStr 。 其中 s1[i] 和 s2[i] 是一組等價字符。 舉個例子&#xff0c;如果 s1 “abc” 且 s2 “cde”&#xff0c;那么就有 ‘a’ ‘c’, ‘b’ ‘…

Ubuntu2404 下搭建 Zephyr 開發環境

1. 系統要求 操作系統&#xff1a;Ubuntu2404&#xff08;64位&#xff09;磁盤空間&#xff1a;至少 8GB 可用空間&#xff08;Zephyr 及其工具鏈較大&#xff09; 2. 安裝必要工具 Tool Min. Version CMake 3.20.5 Python 3.10 Devicetree compiler 1.4.6 2.1 安裝系…

2025年06月07日Github流行趨勢

項目名稱&#xff1a;netbird 項目地址url&#xff1a;https://github.com/netbirdio/netbird項目語言&#xff1a;Go歷史star數&#xff1a;14824今日star數&#xff1a;320項目維護者&#xff1a;mlsmaycon, braginini, pascal-fischer, lixmal, pappz項目簡介&#xff1a;使…

fast-reid部署

配置設置&#xff1a; 官方庫鏈接&#xff1a; https://github.com/JDAI-CV/fast-reid# git clone https://github.com/JDAI-CV/fast-reid.git 安裝依賴&#xff1a; pip install -r docs/requirements.txt 編譯&#xff1a;切換到fastreid/evaluation/rank_cylib目錄下&a…

clickhouse 和 influxdb 選型

以下是 ClickHouse、InfluxDB 和 HBase 在體系架構、存儲引擎、數據類型、性能及場景的詳細對比分析: ??? ?一、體系架構對比? ?維度??ClickHouse??InfluxDB??HBase??設計目標?大規模OLAP分析,高吞吐復雜查詢 時序數據采集與監控,優化時間線管理高吞吐隨機…

ros創建工作空間配置運行狀態機

ROS 一、創建工作空間目錄 /home/wict/workspace/hudahua/ros/catkin_ws #初始化工作空間&#xff08;僅需一次&#xff09; catkin_init_workspace二&#xff1a;回到根目錄編譯 #創建正確的工作空間結構&#xff08;如果尚未創建&#xff09; mkdir -p ~/workspace/hudahua…

【看到哪里寫到哪里】C的“數組指針”

C里面&#xff0c;數組指針&#xff0c;不是基本類型。顧名思義&#xff0c;數組指針&#xff0c;是指針&#xff0c;是指向數組的指針&#xff1b; 1.它的基本定義樣子是 type (*ptr)[size]; 這個指針&#xff0c;指向的數組的&#xff1b;這里要注意&#xff0c;要定義數組…

深度相機的日常學習

文章目錄 一、深度相機的概念二、深度相機的工作原理三、深度相機的應用領域 一、深度相機的概念 深度相機&#xff08;Depth Camera&#xff09;是一種能夠捕捉場景中物體距離信息的設備&#xff0c;與傳統的 RGB 相機不同&#xff0c;深度相機不僅可以獲取場景的二維圖像信息…