这个符号在c++中是什么意思?

what does this notation mean in c++

本文关键字:是什么 意思 c++ 符号      更新时间:2023-10-16

所以我有:

char inBuf[80]

然后是另一行

inBuf+9

当我把+9加到数组名上意味着什么?

与引用第9号元素(从0开始)相同。

一个等价的符号是:

&inBuf[9]

如果您想获得该值,您可以使用*(inBuf+9)

指向数组的第10个元素。例如:

*(inBuf + 9) = 10

将第10个元素赋值为10

答案已经给出了。我可能只是在重复。

这被称为指针算术,是因为算术操作涉及指针。有些事情只能用指针来做。
就像你可以给它加一个整数,但只有当指针指向内存中的某个数组时,你才能减去一个整数。
你也不能减去指针,因为这可能会导致一些关键的内存位置(对于操作系统)。

加法在指针算术中的特殊之处在于它照顾到数组元素的数据类型,所以当你说

char inBuf[80]
inBuf + 9

它会移动足够容纳9个字符(通常是9*1字节)的内存位置

int inBuf[80]
inBuf + 9

这将增加足够容纳9个整数(通常为9*4字节)的内存位置。

数组和指针并不总是相同的,关于
,请参阅《C编程专家》。此外,永远不要多态地使用指针算术,请参阅《scott meyers的书》,了解

使用没有限定符的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) = '';   // overwrite the 10th element in inBuf with a NUL
const char* p = strchr(inBuf + 9, ' ');  // find space at or beyond 10th char

inBuf类似于&inBuf[0]。所以inBuf +9表示inBuf的地址加上9个字符的长度(&inBuf[9])