首页 > 编程知识 正文

c语言指针指向字符串,用指针方式实现字符串复制

时间:2023-05-06 05:25:32 阅读:115585 作者:201

体验ByVal和ByRef

Dim k As Long

版权所有(k ),40000,4,4

等于k=40000; 从常数40000 (保存默认ByRef )的临时变量的位置)地址)复制4字节到保存变量k的内存。

版权所有byvalvarptr (k ),byval 40000,4

k=(40000的地址); 从地址40000复制4字节到变量k所在的内存。 由于无法访问具有地址40000的内存,操作系统将通知访问权限迁移内存错误

复制内存验证器(k ),40000,4,4

从保存有常数40000的临时变量的位置(地址)复制4字节(即40000 ),然后前往保存有变量k的存储器地址值的临时变量的位置。 这无法避免内存越权访问错误,但k的值保持不变。

“看看我们的东西复制到哪里了

次测试复制内存(

Dim i As Long,k As Long

k=5

I=varptr(k )

复制内存I,40000,4 ' note 4:

Debug.Print k

Debug.Print i

I=varptr(k )

复制内存字节I,40000,4 ' note 5:

Debug.Print k

最终辅

程序输出:

5

40000

40000

NOTE4使用默认的ByVal,并传递指向I地址(即I )的指针,因此常量40000被复制到变量I,I的值为40000,但k的值保持不变。 但是,在NOTE4之前,有一个I=varptr(k ),本来打算把I本身作为一个指针来使用。 此时,我们必须像NOTE5那样在ByVal中传递指针I,I是指向变量k的指针,所以最后常数40000被复制到变量k中

'使用更安全的复制内存,明确地使用指针!

privatedeclaresubcopymemorylib ' kernel32 ' alias ' rtlmovememory ' (byvaldestinationaslong,ByVal Source As Long,byvallength

subswapstrptr2(saasstring,sB As String ) )。

Dim lTmp As Long

Dim pTmp As Long,psA As Long,psB As Long

ptmp=varptr(ltmp ) : PSA=varptr (sa ) : PSB=varptr (sb ) )

复制内存ptmp,psA,4

复制内存PSA,psB,4

复制内存PSB,pTmp,4

最终辅

请注意,上述复制内存声明使用的是ByVal和long,需要传递32位地址值。 如果将另一个类型传递给此API,编译器将报告错误。 例如,现在使用以下语句:

转载于:https://www.cn blogs.com/whchensir/p/4135560.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。