c++ - 了解数组指针双括号的 C++ 语法
问题描述
我编写了一个脚本,它接收一个包含指针数组的结构(Evt)uint16_t *DataChannel[Evt->ChSize[ch]]
。然后我可以遍历数据并打印出值,如下所示:
for(uint16_t ch=0; ch<sizeof(Evt->DataChannel)/sizeof(Evt->DataChannel[0]); ++ch){
for(int adc_it=0; adc_it<(Evt->ChSize[ch]); ++adc_it){ for(int adc_it=0; adc_it<(Evt->ChSize[ch]); ++adc_it){
std::cout << (Evt->DataChannel)[ch][adc_it] << " ";
}
}
我不明白第二个括号来自哪里([adc_it]),它在做什么以及它是如何工作的。我认为 ( Evt->DataChannel
) 应该是一个uint16_t
不是数组的,那么为什么第二个括号呢?
我试图在一段快速的代码中复制它:
#include <iostream>
int main()
{
int* test[10];
*(test[0]) = 5;
std::cout << test[0][0] << std::endl; //Gives 5
std::cout << test[0][1] << std::endl; //Seg faults
return 0;
}
再次有人可以解释test[0][0]
正在做什么,因为我不知道为什么它运行但test[0][1]
失败了?
干杯多姆
解决方案
C++ 允许[
]
在取消引用指针时使用数组表示法。
在最简单的情况下,您可以这样说:
char *ptr = new char[10];
这将创建一个指向 char 的指针,该指针指向分配有 10 个字符的数组中的第一个字符new[]
。
这样做之后:
char ch = *ptr;
和
char ch = ptr[0];
做同样的事情。但是,由于数组中有 10 个字符,您也可以说:
char ch5 = ptr[5];
访问数组更上方的元素。
这导致 C++(以及它的起源地 C)中的等价性:
ptr[x];
等同于:
*(ptr + x);
对于任何引用的指针/数组ptr
和任何索引x
。
推荐阅读
- c - 不同设备的相同设备节点:更改一个节点的值会影响另一个节点 - 如何解决?
- go - 使用 golang 嵌套结构(带接口)
- javascript - react-hook-form:在选择元素中使用 readyOnly
- php - 在Firefox中添加右键单击地址栏的菜单项:它是如何在php中编程以及如何在本地模拟它?
- json - Talend 以一种奇怪的格式提取 JSON
- python - pandas dataframe - 通过 REST API 添加到 woocommerce
- symfony - 如何在 Symfony 中将 CacheInterface 与 Paginator 一起使用?
- vlang - 我将如何在 Vlang 中创建静态库?
- python-3.x - 使用元素树将 xml 字节转换为字符串
- java - 绑定application.properties文件时如何强制强制字符串?