我可以在这样的循环中使用 const char*
的 strlen
并期望 O(n) 时间复杂度,还是会导致 O(n^2 )?我认为它看起来比对字符串长度使用变量更简洁。
void send_str( const char* data ) {
for (uint8_t i = 0; i < strlen(data); i++)
send_byte( data[i] );
}
是否取决于优化级别?
最佳答案
我认为您永远不能依赖优化的发生。
如果你真的想避免一个额外的变量,为什么不这样做:
void send_str(const char *data)
{
for(size_t i = strlen(data); i != 0; --i)
send_byte(*data++);
}
或者,不那么傻,更像是一个实际的生产质量 C 程序:
void send_str(const char *data)
{
while(*data != '\0')
send_byte(*data++);
}
遍历字符两次完全没有意义,所以根本不要调用 strlen()
,自己检测字符串结尾。
关于c - const char* 的 strlen 是否经过优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17545577/