首页 > 解决方案 > 了解数组指针双括号的 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++

解决方案


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


推荐阅读