社区
语言基础/算法/系统设计
帖子详情
如何使用 Pointer 修改 string
s11ss
2009-11-08 02:10:45
procedure TForm1.Button1Click(Sender: TObject);
var
p: Pointer;
s: string;
begin
s := 'a23';
p := PChar(s);
Byte(p^) := Ord('1');//想要实现 s[1] := '1',但这里报错
ShowMessage(s);
end;
...全文
103
8
打赏
收藏
如何使用 Pointer 修改 string
procedure TForm1.Button1Click(Sender: TObject); var p: Pointer; s: string; begin s := 'a23'; p := PChar(s); Byte(p^) := Ord('1');//想要实现 s[1] := '1',但这里报错 ShowMessage(s); end;
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Seamour
2009-11-08
打赏
举报
回复
[Quote=引用 6 楼 s11ss 的回复:]
那为什么 s[1] := '1' 可以呢?
[/Quote]
看反汇编就知道了,str[N] 为 l-value 时会调用 system._UniqueString*,把常量字符串变成了变量。所以 str[N] 为 l-value 时效率非常低
mdejtod
2009-11-08
打赏
举报
回复
S是变量,在任何情况下你都可以直接修改,但是
p := PChar(s);
这之后,P就是一个常量指针,常量指针所指的内容不可被修改,但是指针的指向地址可以修改
而指针常量的话,则是指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化
var
p: PChar;
s: string;
begin
s := 'a23';
p := PChar(s);
GetMem(p,Length(S));
CopyMemory(p,PChar(s),Length(s));
P[0] := '1';
s := p;
ShowMessage(s[1]);
FreeMem(p,Length(s));
end;
搞不明白楼主为什么要绕一个圈子来实现这功能。。。。。
希望我没搞错,水平有限。。。
s11ss
2009-11-08
打赏
举报
回复
那为什么 s[1] := '1' 可以呢?[Quote=引用 5 楼 seamour 的回复:]
s指向的是常量字符串,当然不能直接写了
[/Quote]
Seamour
2009-11-08
打赏
举报
回复
s指向的是常量字符串,当然不能直接写了
s11ss
2009-11-08
打赏
举报
回复
谢谢,不过不管用啊 :([Quote=引用 3 楼 huoxin8226 的回复:]
p := PChar(s)+1;
PByte(p)^:= Ord('1');
试试看
[/Quote]
huoxin8226
2009-11-08
打赏
举报
回复
p := PChar(s)+1;
PByte(p)^:= Ord('1');
试试看
s11ss
2009-11-08
打赏
举报
回复
[Quote=引用 1 楼 preserve 的回复:]
是编译通不过么?
Byte(p^)换成PByte(p)^试试
[/Quote]编译能通过,换成这个PByte(p)^以后编译也能通过,但运行时还是报错,还是 Access Violation.
preserve
2009-11-08
打赏
举报
回复
是编译通不过么?
Byte(p^)换成PByte(p)^试试
《深度学习入门:基于Python的理论与实现》案例实现.zip
《深度学习入门:基于Python的理论与实现》案例实现.zip
node-v6.14.0-sunos-x86.tar.xz
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js
使用
了模块化的架构,通过npm(Node package manag
er
,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
node-v6.15.1-linux-arm64.tar.xz
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js
使用
了模块化的架构,通过npm(Node package manag
er
,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
node-v6.10.3-linux-s390x.tar.xz
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js
使用
了模块化的架构,通过npm(Node package manag
er
,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
PyTorch深度学习 —— 基于小土堆视频等资料.zip
PyTorch深度学习 —— 基于小土堆视频等资料.zip
语言基础/算法/系统设计
16,748
社区成员
33,246
社区内容
发帖
与我相关
我的任务
语言基础/算法/系统设计
Delphi 语言基础/算法/系统设计
复制链接
扫一扫
分享
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章