gpt4 book ai didi

c - 在 Delphi/C 中更快地传递参数

转载 作者:太空狗 更新时间:2023-10-29 15:49:23 25 4
gpt4 key购买 nike

我有 2 个部分的应用程序,Delphi 和 C,我有 2 个问题 1. 给Delphi传递参数最快的方法是什么?

procedure name(Data: string); // Data is Copied to another location before passing so its slow
procedure name(var Data: string); // Data is Passed by pointer, Faster
procedure name(const Data: string); // unknown
  1. 我想在 c 中通过指针传递参数,我有一个 char 数组和一个函数,我不想传递整个数组,切掉它的第一部分并传递其余部分

    void testfunction(char **Data)
    {
    printf("Data = %d\n", *Data);
    return;
    }

    int main()
    {
    char Data[] = "TEST FUNCTION";
    testfunction(&&Data[4]); // Error
    return 0;
    }

谢谢

最佳答案

Delphi 字符串驻留在堆上,并且总是通过指针传递。您的第一个按值传递示例不正确。按值传递的字符串不会被复制。仅复制引用。这对于字符串是可能的,因为它们具有神奇的写时复制行为。复制按值传递的动态数组。

在传递字符串时使用 const 具有最佳性能,因为编译器可以优化引用计数代码。

您的 C 代码有些困惑。您不需要 char**,而是想要 char*。请记住,一个 C 字符串,一个 char*,只是一个指向以 null 结尾的内存块的指针。您不需要使用指向 C 字符串的指针,因为它已经是一个指针。

你肯定是指 %s 而不是 %d。要传递从第 5 个字符开始的 C 字符串,请编写 Data+4

 void testfunction(char *Data) {
printf("Data = %s\n", Data);
}

int main() {
char Data[] = "TEST FUNCTION";
testfunction(Data+4);
return 0;
}

关于c - 在 Delphi/C 中更快地传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com