我试图理解这个C ++指针技巧是如何工作的。在MSDN Obtaining a File Name From a File Handle中,我们可以看到:
// Copy the drive letter to the template string
*szDrive = *p;
首先他们宣布一个“模板字符串”,它将接收没有反斜杠(TCHAR szDrive[3] = TEXT(" :");
)的驱动器号,然后他们做这个指针技巧和vo!我已经尝试过拆解,但根本没有任何线索:
*szDrive = *p;
011D178D mov eax,dword ptr [p]
011D1793 mov cl,byte ptr [eax]
011D1795 mov byte ptr [ebp-214h],cl
我担心这是有史以来最蹩脚的伎俩......
答案 0 :(得分:10)
因为在C ++中,char-arrays和char-pointers在很多方面是等价的,所以它们解除引用两个指针,将一个元素从一个数组复制到另一个数组。
您可以等效地表达相同的功能,这样可以更容易理解他们在做什么:
szDrive[0] = p[0];
答案 1 :(得分:8)
此代码:
*szDrive = *p;
相当于:
szDrive[0] = p[0];
表示您将第一个符号从字符串p
复制到字符串szDrive
,在这种情况下是驱动器号。