gpt4 book ai didi

c - 取消引用数组的元素

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:35 25 4
gpt4 key购买 nike

这里有很多这样的问题,我不能很好地解决这个问题 - 我希望得到更清晰的答案(例如 Array of pointers to arrays 很接近,我只是无法让它与typedef)。

此代码为一组 LED 定义了一组动画序列。要输出的值是根据序列、硬件模型和序列中的阶段来选择的。我很想为每个序列重复 for 循环,但我可能会再次使用它并可能在这里学到一些东西。

基于打印值,我没有从 *(sequences[mode])[model][prevstage][ix] 中得到我期望的结果。我错过了什么?

void sequence(unsigned char reset, t_mode mode, unsigned char delaydiv4)
{
typedef signed char seq_t[2][8][10];

const seq_t centreSequence = {
{
{ZERO_LEFT_2, ZERO_RIGHT_2, -1},
.
{-1},
},
{
{ONE_LEFT_2, ONE_RIGHT_2, -1},
.
{-1},
},
};
const seq_t leftSequence = {
{
{ZERO_RIGHT_2, -1},
.
{ZERO_LEFT_TOP, ZERO_LEFT_BOT, -1},
},
{
{ONE_RIGHT_2, -1},
.

{ONE_LEFT_TOP, ONE_LEFT_BOT, -1},
},
};
const seq_t rightSequence = {
{
{ZERO_RIGHT_2, -1},
.
.
{ZERO_LEFT_TOP, ZERO_LEFT_BOT, -1},
},
{
{ONE_RIGHT_2, -1},
.
.

{ONE_LEFT_TOP, ONE_LEFT_BOT, -1},
},
};

const seq_t* sequences[] = {&leftSequence, &rightSequence, &centreSequence};

static unsigned char stage;
static unsigned char prevstage;
const unsigned char model = 0;
if (reset != 0)
{
stage = 1;
prevstage = 0;
}

for (unsigned ix=0; sequences[mode][model][prevstage][ix] != -1; ++ix)
{
digitalWrite(*(sequences[mode])[model][prevstage][ix], 0);
}

最佳答案

seq_t[2][8][10] 是一个 3D 数组。这意味着 seq_t 是指向 typdef signed char 的指针的指针。 seq_t 指向名为 seq_t[2] 的指针数组(2 个指针的数组)的第一个位置。

举个简单的例子,看看这张图:

enter image description here

它是关于一个名为 nums[5][4] 的二维数组,其中 nums[2] 是指向每个红色数组第一个位置的指针数组和 nums 是指向 int 的指针(或者任何 nums[5][4] 是...)

在您的问题中,&leftSequence 是指向leftSequence 的指针。 leftSequence 本身是一个指向指向 char 的指针的指针,因此您只需构建一个指向指向指向 char 的指针的指针!!!!

你真的想用它做什么?!!


我想完成我的回答。

在您编写的代码中:

sequences[mode][model][prevstage][ix]   //in the while

和:

*(sequences[mode])[model][prevstage][ix]   //in digitalWrite

两者都不正确。 * 是一个非常低优先级的运算符,因此您的第二个代码完全像:

*(sequences[mode][model][prevstage][ix])

正如我所说,sequences[mode] 是指向您的三种模式之一的指针,而不是其中之一。

您可以使用 () 和 * 来修复它们:

(*sequences[mode])[model][prevstage][ix]  

最后...您使用了一个额外的指针。这更简单:

  const seq_t* sequences[] = {leftSequence, rightSequence, centreSequence};

sequences[mode][model][prevstage][ix] != -1 //in the while

digitalWrite(sequences[mode][model][prevstage][ix], 0); //digitalWrite

顺便说一句,我不太了解 digitalwrite 函数,所以也许你需要另一个 * ...

我想我已经完全解释过了......

关于c - 取消引用数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20964546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com