C语言的指针的使用

初学者可能对指针了解的不是很深入,下面我集中的介绍下指针的使用,它与所指的对象是一个什么样的关系。
有如下C代码:
              int  i=-5;
              int  *te = &i;
            cout<<&i<<  "  "  <<te<< "    "  <<&te<<endl;
输出为:0013FF2C  0013FF2C    0013FF20
我们看都te跟&i是一样的地址,其实都是指向i,而&te就是te所在的那个地址,因为指针也需要控件来存储。
我们看汇编代码:
            int i=-5;
0041435F  mov         dword ptr [ebp-3Ch],0FFFFFFFBh   
//这里把-5放到ebp-3ch这个地址因为int是4个字节所以是双字,
                 //dword ptr[地址],把值放入这个地址。
            int *te = &i;
00414366  lea         eax,[ebp-3Ch]             
// 这里是把ecp-3ch这个地址值给eax,也就i的地址值
00414369  mov         dword ptr [ebp-48h],eax  eax     (
//i的地址值)给了ebp-48h这个地址(即&te)
// 我们看到ebp-48h - (ebp - 3ch) = 12 = ch ,同样我们上面的输出也是相差ch。
//所以说te的地址是0013FF20 ,但是它指向的控件是0013FF2C。 




下面的输出不再分析.
            cout<<&i<<"  "<<te<<"    "<<&te<<endl;
0041436C  mov         esi,esp 
0041436E  mov         eax,dword ptr [__imp_std::endl (41A31Ch)] 
00414373  push        eax 
00414374  mov         edi,esp 
00414376  lea         ecx,[ebp-48h] 
00414379  push        ecx 
0041437A  push        offset string "    " (4179ACh) 
0041437F  mov         ebx,esp 
00414381  mov         edx,dword ptr [ebp-48h] 
00414384  push        edx 
00414385  push        offset string "  " (41796Ch) 
0041438A  mov         eax,esp 
0041438C  lea         ecx,[ebp-3Ch] 
0041438F  push        ecx 
00414390  mov         ecx,dword ptr [__imp_std::cout (41A320h)] 
00414396  mov         dword ptr [ebp-160h],eax 
0041439C  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (41A330h)] 
004143A2  mov         ecx,dword ptr [ebp-160h] 
004143A8  cmp         ecx,esp 
004143AA  call        @ILT+410(__RTC_CheckEsp) (41119Fh) 
004143AF  push        eax 
004143B0  call        std::operator<<<std::char_traits<char> > (41128Ah) 
004143B5  add         esp,8 
004143B8  mov         ecx,eax 
004143BA  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (41A330h)] 
004143C0  cmp         ebx,esp 
004143C2  call        @ILT+410(__RTC_CheckEsp) (41119Fh) 
004143C7  push        eax 
004143C8  call        std::operator<<<std::char_traits<char> > (41128Ah) 
004143CD  add         esp,8 
004143D0  mov         ecx,eax 
004143D2  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (41A330h)] 
004143D8  cmp         edi,esp 
004143DA  call        @ILT+410(__RTC_CheckEsp) (41119Fh) 
004143DF  mov         ecx,eax 
004143E1  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (41A308h)] 
004143E7  cmp         esi,esp 
004143E9  call        @ILT+410(__RTC_CheckEsp) (41119Fh)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值