Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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++ - Fatal编程技术网

C++ 加号运算符对数组做什么?

C++ 加号运算符对数组做什么?,c++,C++,我在一个Arduino库中找到了这段代码 u8 buf[6]; Host2SCS(buf+0, buf+1, Position); Host2SCS(buf+2, buf+3, Time); Host2SCS(buf+4, buf+5, Speed); 加号运算符对数组的作用是什么?buf是一个指针(指向数组),在此上下文中,+运算符执行指针算术。例如: int A[] = {5, 1, 4, 8}; std::cout << A << std::endl; std::

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

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

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

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

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

output:
0x7d972ee131c0
0x7d972ee131cc
inta[]={5,1,4,8};

std::cout在表达式中,
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);
    

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

    数组名在用作指针时衰减为指向其第一个元素的指针。