gpt4 book ai didi

c - 字符串 [x] 与 *字符串++

转载 作者:太空狗 更新时间:2023-10-29 17:05:51 27 4
gpt4 key购买 nike

这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。)

destination[count] 和 *destination++ 之间的确切区别是什么? destination[count] 是否在每次调用时都从 0 移动到 count ? *destination++ 是否每次调用都加 1?

char *const string = "Hello world!";
char *destination = malloc(strlen(string) + 1);
int count = 0;
while(string[count] != '\0')
{
destination[count] = string[count];

count++;
}

char *const string = "Hello world!";
char *destination = malloc(strlen(string) + 1);
char *ptr = string;
while(*ptr != '\0')
{
*destination++ = *ptr++;
}

最佳答案

这取决于编译器。使用现代编译器,如果不实际查看生成的代码,就不可能在单指令级别预测任何优化。两者都可能编译为等效指令。

也就是说,destination[count] 不会在每次调用时从 0 循环到 count。它获取 destination[0] 的内存位置,加上count 倍于 *destination 类型的大小,然后在那里查找。 (当然,这都是天真的说法——编译器可能做的更快。)

另一方面,*destination++ 获取了 destination[0] 的内存位置(不再是数组的开头, 因为你已经改变了 destination), 看那里,并添加 *destination 类型的大小,以便 destination[0] 引用到以前的 destination[1]

关于c - 字符串 [x] 与 *字符串++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4124099/

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