C語言一級指針二級指針和三級指針區(qū)別及使用詳解
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)代碼,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12win10環(huán)境下vscode Linux C++開發(fā)代碼自動提示配置(基于WSL)
這篇文章主要介紹了win10環(huán)境下vscode Linux C++開發(fā)代碼自動提示配置(基于WSL),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05Qt GUI圖形圖像開發(fā)之QT表格控件QTableView詳細使用方法與實例
這篇文章主要介紹了Qt GUI圖形圖像開發(fā)之QT表格控件QTableView詳細使用方法與實例,需要的朋友可以參考下2020-03-03C++實現(xiàn)LeetCode(201.數字范圍位相與)
這篇文章主要介紹了C++實現(xiàn)LeetCode(201.數字范圍位相與),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-08-08最新VScode C/C++ 環(huán)境配置的詳細教程
這篇文章主要介紹了最新VScode C/C++ 環(huán)境配置的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11