Arrays 如何检查数组中元素的位置?

Arrays 如何检查数组中元素的位置?,arrays,c,memory,struct,embedded,Arrays,C,Memory,Struct,Embedded,我有结构 struct timer_t; 以及这些计时器结构的数组 timer_t timer[6]; 我还有一个回调函数,它将数组的一个元素作为参数 void timer_callback(timer_t *timer) { //how can I check which position of the timer_t timer[6] is? } 正如您在代码中看到的,我的问题是如何获得数组中的元素位置? 需要知道数组的哪个元素是*计时器。我可以得到回调函数中的计时器数组。 谢

我有结构

struct timer_t; 
以及这些计时器结构的数组

timer_t timer[6];
我还有一个回调函数,它将数组的一个元素作为参数

void timer_callback(timer_t *timer)
{
   //how can I check which position of the timer_t timer[6] is?
}
正如您在代码中看到的,我的问题是如何获得数组中的元素位置? 需要知道数组的哪个元素是*计时器。我可以得到回调函数中的计时器数组。
谢谢。

您不能简单地“知道”位置,您可以传递数组并遍历它,或者传递元素所在的索引。这取决于调用函数时是否知道元素的位置,并且需要搜索它

编辑:如果函数中有数组:

// you will need a different array name as to not conflict
int i = 0;
while (i < 6 && *timer != timer_array[i]) i++;

if (i != 6) {
    // timer found
}

编辑:我建议在整个代码中使用define ARRAY_SIZE 6而不是literal 6。或者更糟糕的是,使用大小除法,如sizeofarray/sizeof*array。

如果您确定回调参数指向数组的元素,则可以使用简单的指针算法:idx=timer\u ptr-timer\u array来创建索引


但是如果它没有指向数组,那么这将导致未定义的行为。

嗯,我认为您需要在计时器[]上迭代搜索所需的attAttribute。数组在哪里定义?它是局部变量还是全局变量?我可以在回调中获取数组。您需要做的第一件事是不要为数组和参数指定相同的符号名,否则在timer\u回调中,timer将引用,数组将不可访问。您能否仅为timer[6]注册一个单独的回调?我可以在回调中获取数组。但是,我如何比较这些元素呢?在循环中是否正确?iftimer[i]==计时器中断;或者如果&timer[i]==&timer break;作为数组中元素的最终位置,比较结构的内容。如果计时器[i]有什么timer.somthing&&timer[i]。somethingelse!=计时器。一些东西。。。。。或者比较元素的地址。正确性取决于您想要的语义,元素的相等是否意味着元素内容相同?还是说它是完全相同的元素?。我只能猜测比较地址和计时器数组[I]==计时器是您想要的。无论如何,没有什么能阻止你理解它——我建议你从一本好的C语言书开始,我建议使用sizeoftimer\u数组/sizeof*timer\u数组,而不是文字6。