满天⭐

	int i = 100;
	int* p = &i;
	int**p1 = &p;
	int***p2 = &p1;
	int****p3 = &p2;
	int*****p4 = &p3;
	int******p5 = &p4;

	printf("%d %d \n",*(*(*p2)),p2[0][0][0]);  
	printf("%d %d \n",*(*(*(*(p3)))),p3[0][0][0][0]) ;
	printf("%d %d\n",*(*(*(*(*(p4))))),p4[0][0][0][0][0]);
	printf("%d %d\n",*(*(*(*(*(*(p5)))))),p5[0][0][0][0][0][0]);

运行结果:

WX20190123-173935@2x.png

 

总结指针特性:

1、任何变量前面都可以加一个或多个* 加上*以后就是一个新的类型 

2、&表达式做取地址用途,那么它会生成一个在原数据类型的基础上多一个*的类型,如 &p2 操作 p2原类型是 int***,那么给&p2表达式赋值的时候必须用一个新的类型 int****类型来接收  

3、不管多少*的变量类型数据宽度都是4个字节(32位的机器上)

4、++/-- 根据自身类型 加或减的值去掉一个星号后的宽度

5、int* p   p的类型是 int*  对变量p加*操作的类型就是去掉一个*的类型 如p2 类型是int*** 那么*p2的类型就是int**仍然是4字节宽度

 

	int i = 100;
010D4CB8  mov         dword ptr [i],64h  
	int* p = &i;
010D4CBF  lea         eax,[i]  
010D4CC2  mov         dword ptr [p],eax  
	int**p1 = &p;
010D4CC5  lea         eax,[p]  
010D4CC8  mov         dword ptr [p1],eax  
	int***p2 = &p1;
010D4CCB  lea         eax,[p1]  
010D4CCE  mov         dword ptr [p2],eax  
	int****p3 = &p2;
010D4CD1  lea         eax,[p2]  
010D4CD4  mov         dword ptr [p3],eax  
	int*****p4 = &p3;
010D4CD7  lea         eax,[p3]  
010D4CDA  mov         dword ptr [p4],eax  
	int******p5 = &p4;
010D4CDD  lea         eax,[p4]  
010D4CE0  mov         dword ptr [p5],eax  
本博客所有文章如无特别注明均为原创。作者:odaycaogen复制或转载请以超链接形式注明转自 123``blog
原文地址《满天⭐

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)