大佬求带飞,VB程序设计
vb吧
全部回复
仅看楼主
level 3
lemonmyt123
楼主
2022年05月31日 15点05分
1
level 13
隨風🍁缒夢
题目讲了一大堆废话就是字符串排
2022年05月31日 15点05分
2
level 15
初音✨七奈
我感觉这不像VB编程,因为VB没有指针类型
2022年05月31日 15点05分
3
lemonmyt123
char *P[]这个应该也可以在vb里运行
2022年05月31日 16点05分
余思培
@lemonmyt123
并不能,VB并不支持指针,并且VB的字符串也是bstr,但在VB中可以模拟指针,字符串变量地址指向的地址即是字符串的真实地址,并且该地址向前四个字节还记录了字符串的大小,另外如果考虑不用指针来做的话,可以考虑用VB的=Mid()和Mid$()=来做
2022年06月01日 00点06分
璐村惂鐢ㄦ埛_0748V5Z馃惥
同意。这个题目本应该是C系列的题目,被人生搬硬套要求用vb做。basic是高级语言,C是中级语言。
2022年06月01日 00点06分
lemonmyt123
@余思培
大佬,具体是怎么操作一下
2022年06月01日 00点06分
level 13
隨風🍁缒夢
VB的String字符串变量是这样的,String变量的地址处(这里的变量地址VarPtr得到)存放的就是指向字符串的地址,这个字符串地址向前偏移4个字节存放的是字符串的长度,可以通过修改这个字符串地址可以指向其他地址实现字符串交换,可以比普通交换快(不需要重新开辟内存空间进行交换),可以仿C++的指针功能
2022年06月01日 01点06分
4
隨風🍁缒夢
例Dim a As String,则VarPtr(a)返回a的变量地址,StrPtr(a)返回a的字符串地址
2022年06月01日 01点06分
隨風🍁缒夢
可以CopyMemory新的地址到VarPtr(a)中,也可以调用MSVBVM60.dll的PutMem4函数拷贝新地址(这个比CopyMemory快,可以省去调用VarPtr)
2022年06月01日 01点06分
lemonmyt123
@隨風🍁缒夢
这是模拟指针咯?
2022年06月01日 01点06分
隨風🍁缒夢
@lemonmyt123
对
2022年06月01日 01点06分
level 11
余思培
我举个例子,剩下的内容你需要自行解决
StrPtr取字符串数据指针
VarPtr取普通变量指针
VB6字符串使用Unicode储存,每个字符占用两个字节,包括数字字符和英文字符也用两个字符储存,在得到指针后,用CopyMemory复制取值(个人建议这里用ByVal声明,不用默认声明),每次取两个字节(也就是说你用于临时取值的变量长过两个字节就行,如Int,Long,只要别用浮点数的数据类型就行,虽然也能用)
好了,现在你可以用vb6模拟指针取到字符串每个位置的值了,快去实现题目的要求吧
2022年06月01日 01点06分
5
余思培
另外我回复的时候没有看到楼上大佬的回复,嗯......CopyMemory建议如楼上大佬一样换成PutMem和GetMem,其内部实现细节不同,PutMem和GetMem在读取和写入字节级(Byte/Word/DWord)数据时更快
2022年06月01日 01点06分
level 6
失名💦
又逮到一个倒霉蛋
2022年06月05日 05点06分
6
1