目錄
1. 基本指针定义与使用
2. 指针与函数(通过指针传参修改实参)
3. 动态内存分配(new 和 delete)
4. 常见错误提醒
首頁 後端開發 C++ C指針示例

C指針示例

Aug 07, 2025 pm 09:55 PM
c++ 指針

指针是C++中用于存储内存地址的核心特性,1. 通过int ptr = &var定义指针并用ptr访问值;2. 函数通过指针参数可修改实参,实现类似引用传递;3. 使用new动态分配内存、delete释放内存,数组则用delete[];4. 需避免野指针、重复释放和内存泄漏,使用后应将指针置为nullptr。掌握取地址&、解引用*及内存管理规则是正确使用指针的关键。

C++ pointer example

指针是 C++ 中非常核心且强大的特性,它允许我们直接操作内存地址。下面通过一个简单、实用的例子来说明指针的基本用法。

C++ pointer example

1. 基本指针定义与使用

#include <iostream>
using namespace std;

int main() {
    int var = 10;           // 普通变量
    int *ptr = &var;        // 定义指针,指向 var 的地址

    cout << "变量 var 的值: " << var << endl;           // 输出 10
    cout << "var 的地址: " << &var << endl;             // 输出地址,比如 0x7fff...
    cout << "指针 ptr 存储的地址: " << ptr << endl;     // 输出相同地址
    cout << "指针 ptr 指向的值: " << *ptr << endl;      // 输出 10,*ptr 是解引用

    // 修改指针指向的值
    *ptr = 20;
    cout << "修改后 var 的值: " << var << endl;         // 输出 20

    return 0;
}

说明:

  • &var:取变量 var 的内存地址。
  • int *ptr:声明一个指向整型的指针。
  • *ptr:解引用操作,获取指针所指向地址中的值。

2. 指针与函数(通过指针传参修改实参)

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 5, y = 10;
    cout << "交换前: x = " << x << ", y = " << y << endl;

    swap(&x, &y);  // 传入地址

    cout << "交换后: x = " << x << ", y = " << y << endl;
    return 0;
}

输出:

C++ pointer example
交换前: x = 5, y = 10
交换后: x = 10, y = 5

重点:

  • 函数参数使用指针,可以修改主函数中的原始变量。
  • 这是“按引用传递”的底层实现方式之一。

3. 动态内存分配(new 和 delete)

int main() {
    int *p = new int;       // 动态分配一个 int 空间
    *p = 100;

    cout << "动态分配的值: " << *p << endl;

    delete p;               // 释放内存
    p = nullptr;            // 避免悬空指针

    // 分配数组
    int *arr = new int[5];
    for (int i = 0; i < 5; ++i) {
        arr[i] = i * 10;
    }

    cout << "数组内容: ";
    for (int i = 0; i < 5; ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;

    delete[] arr;           // 释放数组
    arr = nullptr;

    return 0;
}

注意:

C++ pointer example
  • new 分配内存,delete 释放单个对象,delete[] 释放数组。
  • 使用后将指针设为 nullptr,防止误用。

4. 常见错误提醒

  • 野指针:指向未知地址的指针。

    int *p;
    *p = 10;  // 错误!p 没有初始化
  • 重复释放内存

    delete p;
    delete p; // 危险!已释放的内存不能再 delete
  • 忘记释放内存:导致内存泄漏。


  • 基本上就这些核心用法。指针刚开始容易让人困惑,但只要记住:

    • 指针存的是地址;
    • * 是解引用;
    • & 是取地址;
    • 动态分配要配对 new/delete

    多写几个例子练一练,很快就能掌握。

    以上是C指針示例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Stock Market GPT

Stock Market GPT

人工智慧支援投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

如何編譯和運行C程序 如何編譯和運行C程序 Sep 16, 2025 am 05:29 AM

InstallaC compilerlikeg usingpackagemanagersordevelopmenttoolsdependingontheOS.2.WriteaC programandsaveitwitha.cppextension.3.Compiletheprogramusingg hello.cpp-ohellotogenerateanexecutable.4.Runtheexecutablewith./helloonLinux/macOSorhello.exeonWi

如何在C中執行系統命令 如何在C中執行系統命令 Sep 21, 2025 am 04:35 AM

使用std::system()函數可執行系統命令,需包含頭文件,傳入C風格字符串命令,如std::system("ls-l"),返回值為-1表示命令處理器不可用。

C自定義分配器示例 C自定義分配器示例 Sep 17, 2025 am 08:45 AM

自定義分配器可用於控制C 容器的內存分配行為,1.示例中的LoggingAllocator通過重載allocate、deallocate、construct和destroy方法實現內存操作日誌記錄;2.分配器需定義value_type和rebind模板,以滿足STL容器類型轉換需求;3.分配器構造與拷貝時觸發日誌輸出,便於追踪生命週期;4.實際應用包括內存池、共享內存、調試工具和嵌入式系統;5.C 17起construct和destroy可由std::allocator_traits默認處理

如何在C中實現自定義迭代器 如何在C中實現自定義迭代器 Sep 20, 2025 am 01:13 AM

答案是定義包含必要類型別名和操作的類。首先設置value_type、reference、pointer、difference_type和iterator_category,然後實現解引用、遞增及比較操作,最後在容器中提供begin()和end()方法以返回迭代器實例,使其兼容STL算法和範圍for循環。

為什麼實時系統需要確定性響應保障? 為什麼實時系統需要確定性響應保障? Sep 22, 2025 pm 04:03 PM

實時系統需確定性響應,因正確性依賴結果交付時間;硬實時系統要求嚴格截止期限,錯過將致災難,軟實時則允許偶爾延遲;非確定性因素如調度、中斷、緩存、內存管理等影響時序;構建方案包括選用RTOS、WCET分析、資源管理、硬件優化及嚴格測試。

C抽像類示例 C抽像類示例 Sep 15, 2025 am 05:55 AM

抽像類是包含至少一個純虛函數的類,不能被實例化,必須作為基類被繼承,且派生類需實現其所有純虛函數,否則仍為抽像類。 1.純虛函數通過virtual返回類型函數名()=0;聲明,用於定義接口規範;2.抽像類常用於統一接口設計,如area()、draw()等,實現多態調用;3.必須為抽像類提供虛析構函數(如virtual~Shape()=default;),確保通過基類指針正確釋放派生類對象;4.派生類繼承後需重寫純虛函數,如Rectangle和Circle分別實現area()計算各自面積;5.可通過

如何將整個文件讀取到C中的字符串中 如何將整個文件讀取到C中的字符串中 Sep 18, 2025 am 06:07 AM

使用std::ifstream和std::istreambuf_iterator可高效讀取文件全部內容到字符串,包括空格和換行,適用於中等大小文本文件。

如何在C中創建靜態變量 如何在C中創建靜態變量 Sep 19, 2025 am 05:24 AM

AstaticVariableInc witherinsitvaluebetwunctioncallsandisinitializedonce.2.Inideafunction,itpreservesstataTateAcrossCalls,siseascountingIterations.3.inaclass,itissharedamondamongallinStancessandMustancessandMustancessandMustbedIendEctIndEtheClastoAvoVovoiDlinkingErrors.4.StaticvariA.StaticvAriA.StaticVariA.StaticVariA

See all articles