Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;指针戏法 我试图理解这个C++指针技巧是如何工作的。在MSDN中,我们可以看到: // Copy the drive letter to the template string *szDrive = *p;_C++_String_Pointers - Fatal编程技术网

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,但很多人都使用;)