C語言 崩潰的雙重指針


指針的指針?

前言:  

       指針的初識點擊移步

雙重指針:

  指向指針的指針是一種多級間接尋址的形式,或者說是一個指針鏈。通常,一個指針包含一個變量的地址。當我們定義一個指向指針的指針時,第一個指針包含了第二個指針的地址,第二個指針指向包含實際值的位置。

 

直接上腳本

#include <stdio.h>
 
int main ()
{
	int a = 10;
	int *p,**pt;
	
	p = &a;
	pt = &p;
	
	printf("變量a的內存地址:0x%X\n",&a); 
	printf("變量a存儲的值:%d\n",a);
	printf("指針p的內存地址:0x%X\n",&p); 
	printf("指針p存儲的地址:0x%X\n",p); 
	printf("指針pt的內存地址:0x%X\n",&pt); 
	printf("指針pt存儲的地址:0x%X\n",pt); 
} 

執行輸出

變量a的內存地址:0x24FE4C
變量a存儲的值:10
指針p的內存地址:0x24FE40
指針p存儲的地址:0x24FE4C
指針pt的內存地址:0x24FE38
指針pt存儲的地址:0x24FE40

由輸出可見,雙重指針pt存儲的地址為指針p的內存地址 即pt = &p ; 單指針之前已經總結過,在此不再贅述;那么*pt,**pt又為何值與指針p的關系是什么? 

#include <stdio.h>
 
int main ()
{
	int a = 10;
	int *p,**pt;
	
	p = &a;
	pt = &p;
	
	printf("變量a的內存地址:0x%X\n",&a); 
	printf("變量a存儲的值:%d\n",a);
	printf("指針p的內存地址:0x%X\n",&p); 
	printf("指針p存儲的地址:0x%X\n",p); 
	printf("指針pt的內存地址:0x%X\n",&pt); 
	printf("指針pt存儲的地址:0x%X\n",pt); 
	printf("指針*pt是什么:0x%X\n",*pt); 
	printf("指針**pt是什么:%d\n",**pt); 
} 

//變量a的內存地址:0x24FE4C
//變量a存儲的值:10
//指針p的內存地址:0x24FE40
//指針p存儲的地址:0x24FE4C
//指針pt的內存地址:0x24FE38
//指針pt存儲的地址:0x24FE40
//指針*pt是什么:0x24FE4C
//指針**pt是什么:10

等價關系 *pt = p ,**pt = p ;

繪制關系圖如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM