我在Arduino库中找到了这段代码
u8 buf[6];
Host2SCS(buf+0, buf+1, Position);
Host2SCS(buf+2, buf+3, Time);
Host2SCS(buf+4, buf+5, Speed);
加号运算符对数组的作用是什么?
答案 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)