Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这个符号在c+中是什么意思+;_C++_Arrays_Syntax - Fatal编程技术网

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位。也许“9
char
的长度”会更好。@Tony:谢谢你的评论。我总是很高兴被纠正。我删除了那个明显是个错误的词(我写得很快,没想太多)。关于inBuf,我认为从添加9个字符的角度来说,谈论地址更容易理解,因为您真正做的是引用一个指向&inBuf+(9*sizeof(char)).10元素的指针。。。它们是基于0的。@Tony:我能说什么,你是对的。这个糟糕的答案真的是罪有应得!不是我的反对票。。。别担心。。。如果每个人第一次都觉得必须让自己变得完美,我们就永远不会得到任何关于S.O.的好答案…:-)。第十元素。。。它们是以0为基础的。这是第10个元素。。。“第9个元素(基于0)”仍然不正确-(“第9个元素(基于0)”将是)。
int inBuf[80]
inBuf + 9