C++基礎之指針

文章目錄

    • 指針介紹
  • C++指針的定義與用法
    • 指針的定義
    • 指針的基本操作
    • 指針的常見用法
      • 1. 動態內存分配
      • 2. 指針與數組
      • 3. 指針作為函數參數(傳址調用)
      • 4. 函數返回指針
    • 特殊指針類型
    • 智能指針(C++11起)
    • 2.入門代碼
    • 3.總結

指針介紹

C++指針的定義與用法

指針是C++中一個非常重要的概念,它直接操作內存地址,提供了靈活的內存管理方式。以下是關于C++指針的詳細介紹:

指針的定義

指針是一個變量,其值為另一個變量的內存地址。指針的定義語法如下:

數據類型 *指針變量名;

例如:

int *p;     // 定義一個指向整型的指針
double *dp; // 定義一個指向雙精度浮點型的指針
char *cp;   // 定義一個指向字符型的指針

指針的基本操作

  1. 取地址運算符(&):獲取變量的內存地址
  2. 解引用運算符(*):訪問指針所指向的內存位置的值
int var = 20;   // 實際變量的聲明
int *ip;        // 指針變量的聲明ip = &var;      // 在指針變量中存儲var的地址cout << "變量var的值: " << var << endl;
cout << "變量var的地址: " << &var << endl;
cout << "指針ip存儲的地址: " << ip << endl;
cout << "指針ip指向的值: " << *ip << endl;

指針的常見用法

1. 動態內存分配

int *ptr = new int;    // 動態分配一個整型內存
*ptr = 10;             // 在分配的內存中存儲值
delete ptr;            // 釋放內存// 動態分配數組
int *arr = new int[10]; // 分配10個整型的內存塊
delete[] arr;           // 釋放數組內存

2. 指針與數組

int arr[5] = {1, 2, 3, 4, 5};
int *p = arr; // 數組名就是數組首元素的地址for(int i = 0; i < 5; i++) {cout << *(p + i) << " "; // 通過指針訪問數組元素
}

3. 指針作為函數參數(傳址調用)

void swap(int *x, int *y) {int temp = *x;*x = *y;*y = temp;
}int main() {int a = 5, b = 10;swap(&a, &b); // 傳遞變量的地址cout << a << " " << b; // 輸出 10 5return 0;
}

4. 函數返回指針

int* createArray(int size) {int *arr = new int[size];for(int i = 0; i < size; i++) {arr[i] = i + 1;}return arr;
}int main() {int *myArray = createArray(5);// 使用數組...delete[] myArray; // 記得釋放內存return 0;
}

特殊指針類型

  1. 空指針(nullptr):表示指針不指向任何對象

    int *ptr = nullptr;
    
  2. void指針:可以指向任意類型的數據

    void *vp;
    int a = 10;
    vp = &a;
    
  3. 指向指針的指針

    int var = 10;
    int *ptr = &var;
    int **pptr = &ptr;
    

智能指針(C++11起)

為了更安全地管理動態內存,C++11引入了智能指針:

#include <memory>// 獨占指針
std::unique_ptr<int> uptr(new int(10));// 共享指針
std::shared_ptr<int> sptr1 = std::make_shared<int>(20);
std::shared_ptr<int> sptr2 = sptr1; // 共享所有權// 弱指針
std::weak_ptr<int> wptr = sptr1;

指針是C++強大但也容易出錯的特性,使用時需要注意內存管理,避免內存泄漏和懸空指針等問題。

2.入門代碼

#include<stdio.h>
//交換兩個值 p就是地址?
void swap(int* p,int* q)
{int t = *p;*p = *q;*q = t;printf("\n");printf("指針內容交換完畢~");}
int main()
{int a = 6;int b = 4;int* p = &a;int* q = &b;printf("%d %d",p,q);printf("\n\r");printf("%d %d",*p,*q);
//	交換指針內容swap(p,q);printf("\n");printf("%d %d",p,q);printf("\n");printf("%d %d",*p,*q);} 

C++版本 交換變量地址以及內容前后對比

#include<stdio.h>
#include<iostream>
using namespace std;
//交換兩個值 p就是地址?
void swap(int* p,int* q)
{int t = *p;*p = *q;*q = t;printf("\n");printf("指針內容交換完畢~");
}
//交換指針指向
void swap_address(int **p,int **q)
{
//  int t = *p;
//  *p = *q;
//  *q = t;
//  //交換指針地址int* k = *p;*p = *q;*q = k;cout << "指針地址交換完畢" << endl;printf("\n");
//  printf("指針內容交換完畢~");
//  
}
int main()
{int a = 6;int b = 4;int* p = &a;int* q = &b;printf("%d %d",p,q);printf("\n\r");printf("%d,%d",a,b);printf("\n\r");//傳入指針內容,用于交換地址printf("%d %d",*p,*q);
//	交換指針內容printf("\n\r");printf("%d,%d",a,b);swap(p,q);printf("\n\r");printf("%d %d",*p,*q);printf("\n\r");swap_address(&p,&q);printf("\n");printf("%d %d",p,q);printf("\n");printf("%d %d",*p,*q);} 

3.總結

指針式核心內容,怎么表示地址,怎么表示指針指向的內容,怎么操作指針,如何正確打印指針,還是指針的內容,二級三級等多級指針如何操作?

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

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

相關文章

基于存儲過程的MySQL自動化DDL同步系統設計

在現代SaaS與微服務架構中&#xff0c;數據庫結構的自動化管理成為保障系統迭代效率與數據一致性的關鍵一環。本文將圍繞如何通過 MySQL 存儲過程構建一個自動建表、字段同步、索引維護、錯誤日志記錄于一體的 DDL 自動同步系統&#xff0c;提供一套完整的工程化實現方案。 一…

【cmake學習】添加庫文件

文章目錄 目的一、原理二、步驟1.修改CMakeList2.main函數如下3.編譯運行 目的 上一篇 學習了使用cmake 構建多源文件工程在項目開發工程中&#xff0c;一般都會生成庫文件或者調用其它的一些庫文件&#xff0c;所以我們要學習一下簡單生成和使用庫文件這里主要介紹 add_libra…

Docker容器化部署實戰:Spring Boot + MySQL + Nginx 一鍵部署完整指南

?? 前言 容器化技術已經成為現代軟件部署的標準實踐。作為一名DevOps工程師,我在過去幾年中參與了數十個項目的容器化改造,深刻體會到Docker在提升部署效率、環境一致性和運維便利性方面的巨大價值。 今天我將通過一個完整的實戰案例,詳細展示如何使用Docker部署一個包含…

分布式選舉算法<一> Bully算法

分布式選舉算法詳解&#xff1a;Bully算法 引言 在分布式系統中&#xff0c;節點故障是不可避免的。當主節點&#xff08;Leader&#xff09;發生故障時&#xff0c;系統需要快速選舉出新的主節點來保證服務的連續性。Bully算法是一種經典的分布式選舉算法&#xff0c;以其簡…

高效調試 AI 大模型 API:用 Apipost 實現 SSE 流式解析與可視化

借助 AI 大模型的實時接口&#xff08;如 OpenAI GPT 或其他第三方模型 API&#xff09;&#xff0c;開發者可以通過 SSE&#xff08;Server-Sent Events&#xff09;流式處理數據&#xff0c;實時獲取模型的逐步輸出。這一技術已廣泛應用于實時問答、代碼生成等領域。本文將基…

【網絡產品經營】園區網絡

園區網絡的產品經營邏輯發生顯著變化&#xff0c;從傳統的“連接功能”導向轉向“業務體驗驅動”&#xff0c;并結合行業場景化需求、技術架構革新及智能化能力提升&#xff0c;形成多維度的產品策略升級。 一、技術架構變革&#xff1a;從多層復雜到極簡全光 傳統架構的瓶頸與…

EasyExcel 4.X 讀寫數據

文章目錄 EasyExcel與SpringBoot集成讀數據讀取數據的流程定義實體類簡單讀取自定義監聽器 讀取指定sheet和所有sheet多行頭讀取數據格式轉換列表數據實體類自定義轉換器自定義監聽器數據讀取 寫數據簡單數據寫出存儲到磁盤返回前端下載 寫出指定列寬&#xff0c;和數值精度丟失…

JVM內存管理<一>:Java內存異常問題排查

一、 內存溢出問題的排查 1. 使用工具 - jdk自帶 jmapvisualvm 2. 流程 堆轉儲&#xff1a; (1) 方法一&#xff1a;程序運行時&#xff0c;采用&#xff1a;jmap -dump:formatb,filed:\\data\\xxlJob.hprof 23300 進行堆文件的轉儲 (2) 方法二&#xff1a;在內存溢出的時候…

Android中Glide.with().load().into() 應付面試源碼解析

1. with(this)&#xff1a;生命周期綁定 Glide.with(Activity/Fragment/Context) 核心機制&#xff1a;創建與 UI 生命周期綁定的 RequestManager 底層實現&#xff1a; 通過 RequestManagerRetriever 獲取單例 非 Application 上下文&#xff1a; 向 Activity/Fragment 添加…

#### es相關內容的索引 ####

倒排索引 結構 #### es倒排索引的結構 ####-CSDN博客 向量索引 結構應用 #### es向量檢索 的 結構及應用_es 向量 文本檢索-CSDN博客 ann算法 ann算法的種類有哪些&#xff0c;之間的區別&#xff0c;各自的適用場景-CSDN博客 地理信息索引 es地理信息索引的類型以及geo_po…

小飛電視:智能電視與移動設備的娛樂新選擇

在數字娛樂時代&#xff0c;人們對于影視內容的需求日益增長&#xff0c;不僅追求豐富多樣的節目選擇&#xff0c;還希望獲得便捷、個性化的觀看體驗。小飛電視正是這樣一款專為智能電視和移動設備設計的視頻娛樂應用&#xff0c;它憑借海量的影視資源、高清流暢的播放效果以及…

刪除node并且重裝然后重裝vue

參考第一篇文章 node.js卸載與安裝超詳細教程_node卸載重裝-CSDN博客 第二篇文章安裝vue Vue安裝與配置教程&#xff08;非常詳細&#xff09;_安裝vue-CSDN博客

基于YOLOv10算法的交通信號燈檢測與識別

目錄 一.&#x1f981; 寫在前面1.1 實現模塊劃分1.2 優化與實時性支持 二.&#x1f981; 相關技術與理論基礎2.1 各版本yolo對比2.2 YOLOv10網絡結構 三.&#x1f981; 結果分析3.1 訓練損失與驗證損失分析3.2 精確率&#xff08;Precision&#xff09;、召回率&#xff08;Re…

洪水風險圖制作全流程:HEC-RAS 與 ArcGIS 的耦合應用

技術點目錄 一、HER-RAS理論二、一維數學模型基本地形導入三、恒定流、非恒定流一維數學模型水流計算四、一維數學模型計算結果分析五、一維數學模型增設構筑物六、二維河道水動力模擬七、HEC-RAS在潰壩模型中的應用八、HEC-RAS在洪水風險圖中的應用了解更多 —————————…

視覺大語言模型未能充分利用視覺表征

視覺大語言模型未能充分利用視覺表征 FesianXu 20250612 at Wechat Search Team 前言 這兩天看到一篇新掛在arxiv上的文章 [1]&#xff0c;討論了下視覺大語言模型的視覺表征退化問題。先前的研究將VLM缺陷歸咎于視覺編碼器薄弱&#xff0c;并提出集成編碼器方案以彌補不足&am…

SSRF3 任意文件讀取

一.任意文件讀取 http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?urlfile:///etc/passwd 讀取文件使用 file://文件路徑即可&#xff0c;這里我們換協議為file&#xff0c;然后從根目錄開始讀取。 /etc/passwd 我們這樣修改完url路徑后查看結果可以看到文件內…

洛谷P3953 [NOIP 2017 提高組] 逛公園

洛谷P3953 [NOIP 2017 提高組] 逛公園 洛谷題目傳送門 題目背景 NOIP2017 D1T3 題目描述 策策同學特別喜歡逛公園。公園可以看成一張 N N N 個點 M M M 條邊構成的有向圖&#xff0c;且沒有 自環和重邊。其中 1 1 1 號點是公園的入口&#xff0c; N N N 號點是公園的出…

Vue3+TypeScript+Element Plus 表格展開行優化方案

在 Vue3 TypeScript Element Plus 項目中優化表格展開行的內存使用&#xff0c;主要從 渲染優化、數據管理 和 內存回收 三方面入手。以下是最佳實踐和完整解決方案&#xff1a; 1. 懶加載展開內容&#xff08;核心優化&#xff09; 只當行展開時才渲染內容&#xff0c;避免…

OpenCV——直方圖與匹配

直方圖與匹配 一、直方圖簡介二、直方圖統計三、直方圖比較四、直方圖均衡化五、自適應的直方圖均衡化六、直方圖反向投影七、模板匹配 一、直方圖簡介 圖像直方圖&#xff08;Histogram&#xff09;是一種頻率分布圖&#xff0c;它描述了不同強度值在圖像中出現的頻率。圖像直…

通義大模型在文檔自動化處理中的高效部署指南(OCR集成與批量處理優化)

1. 傳統OCR解決方案常面臨識別精度低、版面分析能力弱、處理效率瓶頸等問題。通義大模型憑借其多模態理解和生成能力&#xff0c;為文檔處理領域帶來革命性突破。本文將深入探討如何高效部署通義大模型實現端到端的文檔自動化處理&#xff0c;特別聚焦OCR集成與批量處理優化兩…