在通过索引访问元素时将char指针递增时是否有任何性能提升?

ult*_*der 8 c

我正在刷新我的"C"知识.我得到Arrays 衰减到指针以及它是如何工作的.在字符串处理中,我一直在运行看起来像这样的代码;

int count_spaces(const char *s)
{
    int count = 0;

    for(; *s != '\0'; s++){
        if(*s == ' '){
            count++;
        }
    }

return count;

}
Run Code Online (Sandbox Code Playgroud)

我从字符串处理代码中获得了什么性能提升而不是编写我的函数?

int count_spaces(const char s[])
{
    int count = 0, i;

    for(i = 0; s[i] != '\0'; i++)
    {
        if(s[i] == ' '){
            count++;
        }
    }
return count;

}
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的词典可供使用何时使用指针而何时不使用?

Dyl*_*kby 8

这取决于编译器.有些编译器可能会为一种方法或另一种方法提供性能提升.

但是,查看具体示例可能很有用.使用gcc -S -O0,我的机器上最低优化的装配输出为第一个功能提供了比第二个功能 3 指令.

但是使用-O3标志它们被优化为相同的汇编文件.

编辑:还可以看到包围,使您的代码可读并且可以防止不幸的错误:)

int count_spaces(const char s[]) {
    int count = 0, i;

    for(i = 0; s[i] != '\0'; i++) {
        if(s[i] == ' ') {
            count ++;
        }
    }
    return count;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

要清楚地回答您的问题:使用最清楚的人以及可能阅读您的代码的人.与可读性和意图清晰度相比,您可能获得的性能提升可以忽略不计.将它留给编译器来从代码中挤出这种性能