最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中指針變量的使用指南

 更新時間:2026年01月07日 11:00:45   作者:司徒軒宇  
本文主要介紹了C++中的指針變量,主要包括基本操作、類型、運(yùn)算、動態(tài)內(nèi)存分配、多級指針、函數(shù)指針、與數(shù)組的使用、常量指針以及智能指針等,感興趣的可以了解一下

指針是C++中的一個核心概念,它存儲的是內(nèi)存地址,而不是實(shí)際的值。理解指針對于掌握C++編程至關(guān)重要。

1. 基本概念

指針的定義和聲明

int x = 10;         // 普通變量
int *ptr = &x;      // 指針變量,存儲x的地址
  • *表示聲明一個指針
  • & 是取地址運(yùn)算符
  • ptr 存儲的是 x 的內(nèi)存地址
  • *ptr 是解引用,獲取該地址存儲的值

2. 指針的基本操作

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    int *ptr = &x;      // ptr指向x
    
    cout << "x的值: " << x << endl;           // 輸出: 10
    cout << "x的地址: " << &x << endl;        // 輸出: x的地址
    cout << "ptr的值: " << ptr << endl;       // 輸出: x的地址
    cout << "*ptr的值: " << *ptr << endl;     // 輸出: 10
    
    *ptr = 20;  // 通過指針修改x的值
    cout << "修改后x的值: " << x << endl;     // 輸出: 20
    
    return 0;
}

3. 指針類型

空指針

int *ptr = nullptr;  // C++11及以后推薦
int *ptr = 0;        // 傳統(tǒng)方式
int *ptr = NULL;     // C風(fēng)格,不推薦在C++中使用

懸空指針(野指針)

指向已釋放內(nèi)存的指針,使用會導(dǎo)致未定義行為:

int *ptr = new int(10);
delete ptr;
// ptr現(xiàn)在成為懸空指針,應(yīng)該避免使用
ptr = nullptr;  // 好習(xí)慣:釋放后置為空

4. 指針運(yùn)算

int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;  // 指向數(shù)組首元素

cout << *ptr << endl;      // 輸出: 1
cout << *(ptr + 1) << endl;// 輸出: 2(指針加法)
cout << ptr[2] << endl;    // 輸出: 3(數(shù)組語法)

ptr++;  // 移動到下一個元素
cout << *ptr << endl;      // 輸出: 2

5. 動態(tài)內(nèi)存分配

// 分配單個變量
int *p = new int;          // 分配內(nèi)存
*p = 100;                  // 賦值
delete p;                  // 釋放內(nèi)存
p = nullptr;               // 置空

// 分配數(shù)組
int *arr = new int[5];     // 分配5個int的空間
for (int i = 0; i < 5; i++) {
    arr[i] = i * 10;
}
delete[] arr;              // 釋放數(shù)組內(nèi)存

6. 多級指針

int x = 10;
int *p = &x;       // 一級指針
int **pp = &p;     // 二級指針
int ***ppp = &pp;  // 三級指針

cout << x << endl;      // 10
cout << *p << endl;     // 10
cout << **pp << endl;   // 10
cout << ***ppp << endl; // 10

7. 指針和函數(shù)

指針作為函數(shù)參數(shù)(按地址傳遞)

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

int main() {
    int x = 5, y = 10;
    swap(&x, &y);  // 傳遞地址
    cout << x << ", " << y << endl;  // 輸出: 10, 5
    return 0;
}

返回指針的函數(shù)

int* createArray(int size) {
    return new int[size];  // 返回動態(tài)數(shù)組的指針
}

// 注意:不要返回局部變量的地址
int* badFunction() {
    int x = 10;
    return &x;  // 錯誤!x在函數(shù)結(jié)束后被銷毀
}

8. 指針和數(shù)組

int arr[3] = {1, 2, 3};

// 數(shù)組名在多數(shù)情況下退化為指針
int *ptr = arr;  // 等價于 int *ptr = &arr[0];

// 通過指針遍歷數(shù)組
for (int i = 0; i < 3; i++) {
    cout << *(ptr + i) << " ";  // 輸出: 1 2 3
}

9. const 和指針

int x = 10;
int y = 20;

// 指向常量的指針(不能通過指針修改值)
const int *ptr1 = &x;
// *ptr1 = 30;  // 錯誤!
ptr1 = &y;      // 正確:可以改變指向

// 常量指針(不能改變指向)
int *const ptr2 = &x;
*ptr2 = 30;     // 正確:可以修改值
// ptr2 = &y;   // 錯誤!

// 指向常量的常量指針
const int *const ptr3 = &x;
// *ptr3 = 30;  // 錯誤!
// ptr3 = &y;   // 錯誤!

10. 智能指針(C++11及以上)

智能指針自動管理內(nèi)存,避免內(nèi)存泄漏:

#include <memory>

// unique_ptr:獨(dú)占所有權(quán)
std::unique_ptr<int> uptr(new int(10));

// shared_ptr:共享所有權(quán)
std::shared_ptr<int> sptr1 = std::make_shared<int>(20);
std::shared_ptr<int> sptr2 = sptr1;  // 引用計數(shù)增加

// weak_ptr:弱引用,不增加引用計數(shù)
std::weak_ptr<int> wptr = sptr1;

到此這篇關(guān)于C++中指針變量的使用指南的文章就介紹到這了,更多相關(guān)C++ 指針變量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++自定義(手撕)vector類實(shí)現(xiàn)過程

    C++自定義(手撕)vector類實(shí)現(xiàn)過程

    文章介紹了C++中std::vector的簡化實(shí)現(xiàn),涵蓋模板類定義、動態(tài)數(shù)組管理、構(gòu)造析構(gòu)函數(shù)、深拷貝機(jī)制、迭代器及容量操作等核心內(nèi)容,旨在通過手動實(shí)現(xiàn)理解其內(nèi)存管理原理和底層實(shí)現(xiàn)邏輯
    2025-09-09
  • C++中的模板template小結(jié)

    C++中的模板template小結(jié)

    這篇文章主要介紹了C++中的模板template的相關(guān)知識,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C++初始化數(shù)組的幾種常見方法(簡單易懂)

    C++初始化數(shù)組的幾種常見方法(簡單易懂)

    本文介紹了C++中數(shù)組的初始化方法,包括一維數(shù)組和二維數(shù)組的初始化,以及用new動態(tài)初始化數(shù)組,在C++11及以上版本中,還提供了使用std::array和std::vector進(jìn)行靜態(tài)和動態(tài)初始化的方式,需要的朋友可以參考下
    2025-02-02
  • C++調(diào)用Python基礎(chǔ)功能實(shí)例詳解

    C++調(diào)用Python基礎(chǔ)功能實(shí)例詳解

    c++調(diào)用Python首先安裝Python,本文以win7為例,給大家詳細(xì)介紹C++調(diào)用Python基礎(chǔ)功能,需要的朋友參考下吧
    2017-04-04
  • C語言實(shí)現(xiàn)哈夫曼樹的構(gòu)建

    C語言實(shí)現(xiàn)哈夫曼樹的構(gòu)建

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)哈夫曼樹的構(gòu)建,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++中的unordered_map用法

    C++中的unordered_map用法

    當(dāng)你在C++中需要使用哈希表(無序映射)來管理鍵值對時,unordered_map?是一個非常有用的數(shù)據(jù)結(jié)構(gòu),本文主要介紹了C++中的unordered_map用法,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • C++用兩個棧實(shí)現(xiàn)一個隊列(面試官的小結(jié))

    C++用兩個棧實(shí)現(xiàn)一個隊列(面試官的小結(jié))

    這篇文章主要給大家介紹了關(guān)于C++用兩個棧實(shí)現(xiàn)一個隊列的相關(guān)資料,這是來自一名面試官的小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • matlab模擬退火算法單約束車間流水線調(diào)度解決實(shí)現(xiàn)及示例

    matlab模擬退火算法單約束車間流水線調(diào)度解決實(shí)現(xiàn)及示例

    這篇文章主要為大家介紹了matlab模擬退火算法求解單約束車間流水線調(diào)度的實(shí)現(xiàn)及示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • C++ 實(shí)現(xiàn)桶排序的示例代碼

    C++ 實(shí)現(xiàn)桶排序的示例代碼

    桶排序或所謂的箱排序,是一個排序算法,工作的原理是將數(shù)組分到有限數(shù)量的桶子,本文詳細(xì)的介紹了如何實(shí)現(xiàn),感興趣的可以了解一下
    2021-07-07
  • 深入理解C++中的vector類的用法及特性

    深入理解C++中的vector類的用法及特性

    vector直接翻譯過來為向量,在C++中為封裝動態(tài)數(shù)組的容器,且有序,需要的朋友可以參考下
    2016-05-05

最新評論

古交市| 象州县| 启东市| 贡觉县| 丰宁| 星座| 油尖旺区| 临泽县| 岚皋县| 济阳县| 新密市| 徐汇区| 陆丰市| 准格尔旗| 无为县| 乐至县| 于田县| 图们市| 贺州市| 象山县| 平江县| 松原市| 威远县| 响水县| 连江县| 磐石市| 宜阳县| 门头沟区| 太原市| 永德县| 蕲春县| 无锡市| 新巴尔虎左旗| 吴忠市| 崇信县| 汝南县| 固镇县| 易门县| 巴彦淖尔市| 濉溪县| 资阳市|