" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++編程語言中的指針(pointer)你了解嗎

 更新時(shí)間:2022年02月27日 17:24:44   作者:liitdar  
這篇文章主要為大家詳細(xì)介紹了C/C++編程語言中的指針,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1 What

指針,是 C/C++ 編程語言中的一個(gè)重要概念。指針通常可以理解為內(nèi)存地址,而指針變量就是用來存放內(nèi)存地址的變量。在同一 CPU 架構(gòu)下,不同類型的指針變量所占用的存儲(chǔ)單元的長(zhǎng)度是相同的(而存放數(shù)據(jù)的變量因數(shù)據(jù)類型的不同,所占用的存儲(chǔ)空間長(zhǎng)度也不同)。例如,在 64 位操作系統(tǒng)(安裝在 X64 CPU 架構(gòu)之上)中,指針變量占用 8 字節(jié)。通過使用指針,不僅可以對(duì)數(shù)據(jù)本身進(jìn)行操作,也可以對(duì)存儲(chǔ)該數(shù)據(jù)的變量地址進(jìn)行操作。

在 C/C++ 編程語言中,指針變量存儲(chǔ)的是其指向的對(duì)象的首地址,指針指向的對(duì)象可以是變量(注意,指針變量也是變量)、數(shù)組、函數(shù)、對(duì)象等占據(jù)存儲(chǔ)空間的實(shí)體。

下面通過一個(gè)簡(jiǎn)單的指針及其指向?qū)ο蟮男畔㈥P(guān)系圖來進(jìn)一步介紹指針?,F(xiàn)假設(shè)有一個(gè)字符變量“c”,其內(nèi)容為“A”,又有一個(gè)名稱為“pChar”的指針(變量)指向該字符變量,因此字符變量“c”與指向其的指針“pChar”關(guān)系如下圖所示:

 通過上圖內(nèi)容,可知:

  • 字符變量“c”的內(nèi)存地址為“0x7ffefdc3ae00”;
  • 指針變量“pChar”指向的字符變量“c”對(duì)應(yīng)的內(nèi)存地址為“0x7ffefdc3ae00”,因此,指針變量的內(nèi)容即為“0x7ffefdc3ae00”,從這里就可以知道,指針變量與其他變量不同,其存儲(chǔ)的內(nèi)容是內(nèi)存地址(而其他變量通常存儲(chǔ)用戶數(shù)據(jù));
  • 指針變量也是一種變量,其也是存儲(chǔ)在內(nèi)存空間中的,在上圖中未將指針變量畫在內(nèi)存空間中是為了便于觀察指針變量及其指向?qū)ο笾g的關(guān)系。

2 用法示例

在本章中,將通過示例代碼來介紹 C/C++ 編程語言中指針的具體用法。

2.1 示例

示例1的代碼內(nèi)容如下:

#include <iostream>
using namespace std;
int main()
{
    char c = 'A';
    cout << "c is: " << c << endl;
    cout << "address of c is: " << (void*)&c << endl << endl;
    char* pChar1 = &c;
    cout << "*pChar1 is: " << *pChar1 << endl;
    cout << "pChar1 is: " << (void*)pChar1 << endl;
    cout << "address of pChar1 is: " << &pChar1 << endl << endl;
    char* pChar2 = pChar1;
    cout << "*pChar2 is: " << *pChar2 << endl;
    cout << "pChar2 is: " << (void*)pChar2 << endl;
    cout << "address of pChar2 is: " << &pChar2 << endl << endl;
    char** pChar3 = &pChar2;
    cout << "**pChar3 is: " << **pChar3 << endl;
    cout << "*pChar3 is: " << (void*)(*pChar3) << endl;
    cout << "pChar3 is: " << (void*)pChar3 << endl;
    cout << "address of pChar3 is: " << &pChar3 << endl << endl;
    return 0;
}

編譯并執(zhí)行上述代碼,(可能的)結(jié)果如下:

通過上述代碼及其執(zhí)行結(jié)果,可知:

  • 在 C/C++ 編程語言中,通過取地址運(yùn)算符“&”可以獲取到變量的內(nèi)存地址;
  • 指向一般變量(如本例中的字符變量 c)的指針變量(如本例中的 pChar1 和 pChar2),為一級(jí)指針,而指向一級(jí)指針的指針變量(如本例中的指針變量 pChar3),為二級(jí)指針,依此類推;
  • 對(duì)指針變量進(jìn)行賦值操作,需要滿足指針級(jí)別的對(duì)應(yīng)關(guān)系,如一級(jí)指針賦值給一級(jí)指針、二級(jí)指針賦值給二級(jí)指針,否則編譯器會(huì)報(bào)錯(cuò);
  • 通過指針操作符“*”可以獲取指針變量指向的對(duì)象的內(nèi)容,如本例中通過“*pChar1”可獲取指針變量 pChar1 指向的字符變量 c 的內(nèi)容;
  • 對(duì)于二級(jí)指針,使用一個(gè)指針操作符“*”獲取到的是該指針指向的指針變量的內(nèi)容,使用兩個(gè)指針操作符“*”才能獲取到該指針變量指向的指針變量指向的對(duì)象的內(nèi)容——有點(diǎn)繞,具體看代碼及運(yùn)行結(jié)果:)
  • 在 C++ 編程語言中,可通過將內(nèi)存地址強(qiáng)轉(zhuǎn)為 void* 類型的方式,來打印其內(nèi)容;

本例的指針及其指向的對(duì)象的相關(guān)信息,如下圖所示:

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!      

相關(guān)文章

  • C語言計(jì)算余數(shù)的圖文步驟

    C語言計(jì)算余數(shù)的圖文步驟

    在本篇文章里小編給大家整理了一篇關(guān)于C語言計(jì)算余數(shù)的圖文步驟內(nèi)容,有需要的朋友們可以參考下。
    2020-02-02
  • C++實(shí)現(xiàn)LeetCode(42.收集雨水)

    C++實(shí)現(xiàn)LeetCode(42.收集雨水)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(42.收集雨水),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言順序表實(shí)現(xiàn)代碼排錯(cuò)

    C語言順序表實(shí)現(xiàn)代碼排錯(cuò)

    這篇文章主要介紹了C語言順序表實(shí)現(xiàn)方法,大家參考使用吧
    2013-12-12
  • C++Lambda表達(dá)式詳解

    C++Lambda表達(dá)式詳解

    這篇文章主要介紹了C++中的Lambda表達(dá)式詳解,本文講解了基本語法、Lambda的使用等內(nèi)容,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • C++ 中placement new 操作符使用方法

    C++ 中placement new 操作符使用方法

    這篇文章主要介紹了C++ 中placement new 操作符使用方法的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C語言中的文件操作詳解

    C語言中的文件操作詳解

    這篇文章主要介紹了C語言中的文件操作詳解,使用文件可以將數(shù)據(jù)直接存放到電腦的硬盤上,做到了數(shù)據(jù)的持久化
    2022-07-07
  • C/C++實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的示例詳解

    C/C++實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的示例詳解

    動(dòng)態(tài)數(shù)組相比于靜態(tài)數(shù)組具有更大的靈活性,因?yàn)槠浯笮】梢栽谶\(yùn)行時(shí)根據(jù)程序的需要?jiǎng)討B(tài)地進(jìn)行分配和調(diào)整,本文為大家介紹了C++實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的方法,需要的可以參考下
    2023-08-08
  • C++實(shí)現(xiàn)PatchMatch圖像修復(fù)算法

    C++實(shí)現(xiàn)PatchMatch圖像修復(fù)算法

    這篇文章主要介紹了C++實(shí)現(xiàn)PatchMatch圖像修復(fù)算法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • C++兩種素?cái)?shù)判定方法

    C++兩種素?cái)?shù)判定方法

    這篇文章主要介紹了C++如何判斷一個(gè)數(shù)是不是素?cái)?shù),提供了兩種方法具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • C++實(shí)現(xiàn)二叉樹基本操作詳解

    C++實(shí)現(xiàn)二叉樹基本操作詳解

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)二叉樹基本操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評(píng)論