C++;指针戏法 我试图理解这个C++指针技巧是如何工作的。在MSDN中,我们可以看到: // Copy the drive letter to the template string *szDrive = *p;
首先,他们声明一个“模板字符串”,该字符串将接收不带尾随反斜杠的驱动器号(C++;指针戏法 我试图理解这个C++指针技巧是如何工作的。在MSDN中,我们可以看到: // Copy the drive letter to the template string *szDrive = *p;,c++,string,pointers,C++,String,Pointers,首先,他们声明一个“模板字符串”,该字符串将接收不带尾随反斜杠的驱动器号(TCHAR szDrive[3]=TEXT(“:”;),然后执行这个指针技巧,瞧!我试图拆开,但一点线索也没有: *szDrive = *p; 011D178D mov eax,dword ptr [p] 011D1793 mov cl,byte ptr [eax] 011D1795 mov byte ptr [ebp-214h],cl
TCHAR szDrive[3]=TEXT(“:”;
),然后执行这个指针技巧,瞧!我试图拆开,但一点线索也没有:
*szDrive = *p;
011D178D mov eax,dword ptr [p]
011D1793 mov cl,byte ptr [eax]
011D1795 mov byte ptr [ebp-214h],cl
恐怕这是最烂的把戏…
< p>因为C++中的char数组和char指针在很多方面是等价的,它们都在引用两个指针,以将一个元素从一个数组复制到另一个数组。 您可以这样等价地表达相同的功能,这可能使您更容易理解他们在做什么:szDrive[0] = p[0];
此代码:
*szDrive = *p;
相当于:
szDrive[0] = p[0];
这意味着你从字符串<代码> P<代码>的第一个符号复制到String <代码> SZRoo> ,这是本例中的驱动字母。
实际上,它不是C++,但CIt不像普通指针用法那样是个骗局。@ GalNeNT与MSDN C++文章有关。无论如何,谢谢你抽出时间。@youngrp小心点。。从技术上讲,复制第一个TCHAR
。这可能是字节,也可能不是字节,取决于平台。见@PeterM当然。我并没有使用TCHAR,但这是一个很好的观点。我从不使用UNICODE,但很多人都使用;)