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

C語言一級指針二級指針和三級指針區(qū)別及使用詳解

 更新時間:2023年05月19日 10:27:47   作者:前端跑起來  
這篇文章主要為大家介紹了C語言一級指針二級指針和三級指針,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

1.一級指針

#include?<stdio.h>
int?main(){
?int?data?=?10;
?int?*p1?=?&data;?//?p1?=?&data
?printf("data的地址是:%p\n",?&data);
?printf("p1指針變量地址是:%d,內容是%d\n",?p1,?*p1);
?//?通過指針修改變量值
?printf("\n");
?*p1?=?20;
?printf("data=%d,?*p1=%d\n",?data,?*p1);
?return?0;
}

運行結果如下:

data的地址是:00AFFB18

p保存的data的地址是:11533080,內容是10

data=20, *p1=20

一級指針的用法其實是取數據的地址,以此類推,二級指針就是取一級指針的地址,也可以表示一級指針的指向的內容。

2.二級指針

指針變量也是一種變量,也會占用存儲空間,也可以使用&獲取它的地址。C語言不限制指針的級數,每增加一級指針,在定義指針變量時就得增加一個星號*。p1是一級指針,指向普通類型的數據,定義時只有一個*;p2是二級指針,指向一級指針p1,定義時需要兩個*。

它們關系如下所示:

上圖關系所示:data是int類型變量,p1是指向data的指針變量,p2又是指向p1的指針變量。

假設a、p1、p2、p3的地址分別為0x00A0、0x0010、0x0020、0x0030。它們之間的關系可以用下圖描述:

根據上圖描述的邏輯,代碼表示如下:

#include?<stdio.h>
int?main(){
?int?data?=?10;
?int?*p1?=?&data;
?int?**p2?=?&p1;
?printf("%d,?%d,?%d\n",?data,?*p1,?**p2);
?printf("&p1=%#X,?p2=%#X\n",?&p1,?p2);?//?p1的地址為p2的值
?printf("&data=%#X,?p1=%#X\n",?&data,?p1);?//?data的地址為p1的值
?return?0;
}

運行結果如下所示:

10, 10, 10

&p1=0X12FFE94, p2=0X12FFE94

&data=0X12FFEA0, p1=0X12FFEA0

**p2等價于(*(*p2)),

3.三級指針

以此類推,一級指針加一個*,二級指針增加兩個*,三級指針增加三個*。

我們可以先用圖去梳理指針之間的關系:

假設a、p1、p2、p3的地址分別為0x00A0、0x0010、0x0020、0x0030。它們之間的關系可以用下圖描述:

根據上圖描述的邏輯,代碼表示如下:

#include?<stdio.h>
int?main(){
?int?a?=?100;
?int?*p1?=?&a;
?int?**p2?=?&p1;
?int?***p3?=?&p2;
?printf("%d,?%d,?%d,?%d\n",?a,?*p1,?**p2,?***p3);
?printf("&p2?=?%#X,?p3?=?%#X\n",?&p2,?p3);
?printf("&p1?=?%#X,?p2?=?%#X,?*p3?=?%#X\n",?&p1,?p2,?*p3);
?printf("?&a?=?%#X,?p1?=?%#X,?*p2?=?%#X,?**p3?=?%#X\n",?&a,?p1,?*p2,?**p3);
?return?0;
}

100, 100, 100, 100

&p2 = 0XC2FB7C, p3 = 0XC2FB7C

&p1 = 0XC2FB88, p2 = 0XC2FB88, *p3 = 0XC2FB88

&a = 0XC2FB94, p1 = 0XC2FB94, *p2 = 0XC2FB94, **p3 = 0XC2FB94

以三級指針 p3 為例來分析上面的代碼。***p3等價于*(*(*p3))。*p3 得到的是 p2 的值,也即 p1 的地址;*(*p3) 得到的是 p1 的值,也即 a 的地址;經過三次操作后,*(*(*p3)) 得到的是 a 的值。

以上就是C語言一級指針二級指針和三級指針區(qū)別及使用詳解的詳細內容,更多關于C語言一級二級三級指針的資料請關注腳本之家其它相關文章!

相關文章

  • C語言根據協(xié)議分割獲取字符串單元的實現(xiàn)代碼

    C語言根據協(xié)議分割獲取字符串單元的實現(xiàn)代碼

    今天小編就為大家分享一篇關于C語言根據協(xié)議分割獲取字符串單元的實現(xiàn)代碼,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C語言實現(xiàn)Fibonacci數列遞歸

    C語言實現(xiàn)Fibonacci數列遞歸

    這篇文章主要介紹了C語言實現(xiàn)Fibonacci數列遞歸,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • C++面向對象編程之析構詳解

    C++面向對象編程之析構詳解

    這篇文章主要為大家詳細介紹了C++面向對象編程之析構,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • win10環(huán)境下vscode Linux C++開發(fā)代碼自動提示配置(基于WSL)

    win10環(huán)境下vscode Linux C++開發(fā)代碼自動提示配置(基于WSL)

    這篇文章主要介紹了win10環(huán)境下vscode Linux C++開發(fā)代碼自動提示配置(基于WSL),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • Qt GUI圖形圖像開發(fā)之QT表格控件QTableView詳細使用方法與實例

    Qt GUI圖形圖像開發(fā)之QT表格控件QTableView詳細使用方法與實例

    這篇文章主要介紹了Qt GUI圖形圖像開發(fā)之QT表格控件QTableView詳細使用方法與實例,需要的朋友可以參考下
    2020-03-03
  • C++實現(xiàn)LeetCode(201.數字范圍位相與)

    C++實現(xiàn)LeetCode(201.數字范圍位相與)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(201.數字范圍位相與),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • 一起來看看C語言線性表的線性鏈表

    一起來看看C語言線性表的線性鏈表

    這篇文章主要為大家詳細介紹了C語言線性表的線性鏈表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++中的整型

    C++中的整型

    這篇文章我們來聊聊C++中的整型,整型即整數,與小數對應。許多語言只能表示一種整型(如Python),而在C++當中根據整數的范圍提供了好幾種不同的整型,下面文章我們就來看看具體是哪幾種,需要的朋友也可以參考一下
    2021-11-11
  • 基于C語言模擬實現(xiàn)人生重開模擬器游戲

    基于C語言模擬實現(xiàn)人生重開模擬器游戲

    人生重開模擬器是前段時間非?;鸬囊粋€小游戲,所以本文我們將一起學習使用c語言寫一個簡易版的人生重開模擬器,感興趣的小伙伴可以了解下
    2024-02-02
  • 最新VScode C/C++ 環(huán)境配置的詳細教程

    最新VScode C/C++ 環(huán)境配置的詳細教程

    這篇文章主要介紹了最新VScode C/C++ 環(huán)境配置的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11

最新評論