C++ 这个符号在c+中是什么意思+;
因此,我:C++ 这个符号在c+中是什么意思+;,c++,arrays,syntax,C++,Arrays,Syntax,因此,我: char inBuf[80] 还有另外一条线 inBuf+9 当我将+9添加到数组名称中时,这意味着什么?inBuf类似于写入&inBuf[0]。 因此,inBuf+9表示inBuf的地址加上9个字符长度(&inBuf[9])。它与引用元素编号9(基于0)相同 等效符号为: &inBuf[9] 如果要获取值,可以使用*(inBuf+9)这将指向数组的第10个元素。例如: *(inBuf + 9) = 10 将10分配给第10个元素。使用不带数组索引限定符的inBuf与
char inBuf[80]
还有另外一条线
inBuf+9
当我将+9添加到数组名称中时,这意味着什么?inBuf类似于写入&inBuf[0]。
因此,inBuf+9表示inBuf的地址加上9个字符长度(&inBuf[9])。它与引用元素编号9(基于0)相同 等效符号为:
&inBuf[9]
如果要获取值,可以使用
*(inBuf+9)
这将指向数组的第10个元素。例如:
*(inBuf + 9) = 10
将10分配给第10个元素。使用不带数组索引限定符的inBuf与查看char*inBuf相同。inBuf+9与inBuf[9]相同。inBuf+9意味着将inBuf的地址增加9。inBuf指的是基址。但是inBuf+9从基址定位第10个元素
*(inBuf + 9) = 34;
这将把值34分配给inBuf数组中的第10个元素。当对其执行加法时,数组标识符(如
inBuf
)衰减为指向数组中第一个元素的指针,并将添加的数字乘以数组元素的大小(在本例中为char,大小为1)产生一个新地址
因此,inBuf+9
是数组中第10个元素的地址,也可以表示为&inBuf[9]
。您可以将其用作:
*(inBuf + 9) = '\0'; // overwrite the 10th element in inBuf with a NUL
const char* p = strchr(inBuf + 9, ' '); // find space at or beyond 10th char
答案已经给出了。我可能只是在重复 这称为指针算术,,因为算术运算涉及指针。有些事情只有你能用指针做
就像您可以向它添加一个整数一样,但只有当指针指向内存中的某个数组时,您才能减去一个整数
您也不能减去指针,因为这可能会导致一些关键的内存位置(对于操作系统) 指针算术中的加法在某种程度上是特殊的,它处理数组元素的数据类型,所以当您说
char inBuf[80]
inBuf + 9
它提升了9个内存位置,足以容纳9个字符(通常为9*1字节)
这将添加9个足够容纳9个整数(通常为9*4字节)的内存位置
数组和指针并不总是相同的,请参阅“专家C编程”了解这一点
也不要使用指针算术多态性,请参阅“scott meyers书”了解这一点未注释的-1原因是什么?不是我。虽然我能理解你来自何方,但我也能理解为什么有人可能投了否决票:从技术上讲,
inBuf
可以衰减为指针,但除非有用,否则不会这样做。您可以使用inBuf
执行一些操作-最明显的是绑定到对具有模板大小的数组的const
引用-您无法对&inBuf[0]
执行这些操作。此外,“9个字符长度的单词”是错误的:在讨论内存地址时,使用“单词”,是与CPU上的本机寄存器大小和/或CPU内存传输宽度相关的内存单元:目前通常为32或64位,而char
通常为8位。也许“9char
的长度”会更好。@Tony:谢谢你的评论。我总是很高兴被纠正。我删除了那个明显是个错误的词(我写得很快,没想太多)。关于inBuf,我认为从添加9个字符的角度来说,谈论地址更容易理解,因为您真正做的是引用一个指向&inBuf+(9*sizeof(char)).10元素的指针。。。它们是基于0的。@Tony:我能说什么,你是对的。这个糟糕的答案真的是罪有应得!不是我的反对票。。。别担心。。。如果每个人第一次都觉得必须让自己变得完美,我们就永远不会得到任何关于S.O.的好答案…:-)。第十元素。。。它们是以0为基础的。这是第10个元素。。。“第9个元素(基于0)”仍然不正确-(“第9个元素(基于0)”将是)。
int inBuf[80]
inBuf + 9