我有这样一种情况,str是一个classic 字符串const char *,我想传递一个子字符串.但当我go 查看运算符优先级表时,我想--也许这根本不重要.

一个是(据我的理解)由i从字符串设置的字符的地址,

另一种是指针算术,将指向字符串的指针偏移i个指针.

有哪些不同之处,在速度方面哪一种更可取?

推荐答案

我有这样一种情况,str是一个classic 的字符串const char *.

在C中,string更像是array个字符,末尾是null character.A string不是指针.这种情况更好地描述为指向字符串的const char *指针.

一(&(str[i]))是...被istr偏移的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,但不一定对取消引用有效.

在速度方面,哪一种更可取?

没有功能上的类似功能,所以速度比较是没有意义的.可能是相似的速度.

C++相关问答推荐

C sscanf没有捕获第二个参数

使用NameSurname扫描到两个单独的字符串

两个连续的语句是否按顺序排列?

减法运算结果的平方的最快方法?

识别和处理c中整数溢出的最佳方法?

以下声明和定义之间的区别

Clang警告称,`ffi_type`与`sizeof`不兼容

如何使解释器存储变量

用gcc-msse 2编译的C程序包含AVX 1指令

GTK函数调用将完全不相关的char* 值搞乱

C程序向服务器发送TCPRST

STM32 FATFS用户手册(Um1721)中的代码正确吗?

unions 的原子成员是个好主意吗?

x86-64平台上的int_fast8_t大小与int_fast16_t大小

当另一个指向 const 的指针观察到数据时,通过指针更改数据是否安全?

在C中定义函数指针?

将数组返回到链表

C 中从 Unix 纪元时间转换的损坏

OpenGL 中的非渐变 colored颜色 变化

我们可以在不违反标准的情况下向标准函数声明添加属性吗?