已知uint16_t **buf,(*buf)[2]和*(*buf + 2)哪种写法开销大
时间: 2023-10-01 07:09:36 浏览: 42
在计算机中,数组名是一个指向数组首元素的指针,因此`(*buf)[2]`和`*(*buf + 2)`实际上是相同的。它们都是取出`buf`指向的二维数组的第三个元素,因为`(*buf)`是一个指向长度为2的一维数组的指针,`*(*buf + 2)`先将`*buf`解引用为长度为2的一维数组,再取出其中的第三个元素,即是`(*buf)[2]`。
因此,它们的执行效率是相同的,不存在开销大的问题。不过,建议使用`(*buf)[2]`这种写法,因为它更加清晰明了,易于理解。
相关问题
已知uint16_t **buf, *buf[3]是什么意思
声明了一个指向指针的指针变量 buf,可以指向 uint16_t 类型的数据。而 *buf[3] 是一个数组,包含了 3 个指向 uint16_t 类型的指针。也就是说,buf[0]、buf[1]、buf[2] 都是指向 uint16_t 类型数据的指针。需要注意的是,这里的指针变量 buf 和数组 *buf[3] 的类型不一样。
已知uint16_t **buf, (*buf)[3]是什么意思
`uint16_t **buf` 是一个指向指针的指针,而 `(*buf)[3]` 是对指针的解引用,并且取第 3 个元素。
具体来说,`(*buf)` 是指向一个 `uint16_t` 类型的指针,而 `(*buf)[3]` 则是对这个指针解引用,并且取第 3 个元素,即 `*( (*buf) + 3 )`,相当于从指针指向的地址开始向后移动 3 个 `uint16_t` 类型的内存块,并取出第 3 个内存块的值。