我有这样一种情况,str
是一个classic 字符串const char *
,我想传递一个子字符串.但当我go 查看运算符优先级表时,我想--也许这根本不重要.
一个是(据我的理解)由i从字符串设置的字符的地址,
另一种是指针算术,将指向字符串的指针偏移i个指针.
有哪些不同之处,在速度方面哪一种更可取?
我有这样一种情况,str
是一个classic 字符串const char *
,我想传递一个子字符串.但当我go 查看运算符优先级表时,我想--也许这根本不重要.
一个是(据我的理解)由i从字符串设置的字符的地址,
另一种是指针算术,将指向字符串的指针偏移i个指针.
有哪些不同之处,在速度方面哪一种更可取?
我有这样一种情况,
str
是一个classic 的字符串const char *
.
在C中,string更像是array个字符,末尾是null character.A string不是指针.这种情况更好地描述为指向字符串的const char *
指针.
一(
&(str[i])
)是...被i
从str
偏移的char
的地址,...
是的,这是正确的.
另一个(
(&str)[i]
)是指针算术,将指向str
的指针偏移i
个指针.
是的,结果是一个指针,但不一定是与&(str[i])
相同的值.
有什么不同(?)
沿str
指向的字符串的&(str[i])
个偏移量.
沿str
附近的指针偏移(&str)[i]
,假设它们是str
旁边的有效const char *
指针,因为它是更大的指针数组的一部分或大约struct
.
如果不是有效的假设,则任何值i > 1
都会导致undefined behavior(UB).使用1可以有效地查找str
之后的地址1,但不一定对取消引用有效.
在速度方面,哪一种更可取?
没有功能上的类似功能,所以速度比较是没有意义的.可能是相似的速度.