plus运算符对数组的作用是什么?

时间:2017-07-07 21:30:01

标签: c++

我在Arduino库中找到了这段代码

u8 buf[6];
Host2SCS(buf+0, buf+1, Position);
Host2SCS(buf+2, buf+3, Time);
Host2SCS(buf+4, buf+5, Speed);

加号运算符对数组的作用是什么?

2 个答案:

答案 0 :(得分:5)

在表达式buf + 1中,其中buf是数组;

  • buf被隐式转换为等于&buf[0]的指针(buf的第一个元素的地址)这是一个已知的标准转换(不出所料)作为“数组到指针”转换“,或”作为“衰减到指针”。
  • 向指针添加整数值是正常的指针算术,因此buf+1的结果等同于&buf[1]

在如图所示的代码中,向指针添加整数值所产生的指针将传递给函数。更明确的代码版本是

u8 buf[6];
Host2SCS(&buf[0], &buf[1], Position);
Host2SCS(&buf[2], &buf[3], Time);
Host2SCS(&buf[4], &buf[5], Speed);

哪种形式“更好”是一种风格问题 - 从技术上讲它们是等同的。

答案 1 :(得分:-2)

buf是一个指针(指向数组),+运算符在此上下文中执行指针运算。例如:

int A[] = {5, 1, 4, 8};
std::cout << A << std::endl;
std::cout << A+3 << std::endl;

output:
0x7d972ee131c0
0x7d972ee131cc

所以A+3 = A + 3 * sizeof (int)的地址

同样,buf+3 = buf的地址+ 3 * sizeof (u8)