C指针算法与数组访问

C指针算法与数组访问,c,arrays,pointers,pointer-arithmetic,C,Arrays,Pointers,Pointer Arithmetic,我有一个函数,它接受指向结构数组的指针 typedef struct { bool isUsed; int count; } MyStructure; void Process(MyStructure *timeStamps, int arrayLength){ for (int i = 0; i < arrayLength; i++){ MyStructure *myStructure = &(*(timeStamps + i));

我有一个函数,它接受指向结构数组的指针

typedef struct {
    bool isUsed;
    int count;
} MyStructure;

void Process(MyStructure *timeStamps, int arrayLength){
    for (int i = 0; i < arrayLength; i++){
        MyStructure *myStructure = &(*(timeStamps + i));
        if (myStructure->isUsed == true){
          /*do something*/
        }
    }

}
有更好的方法吗

MyStructure *myStructure = &timeStamps[i];
相当于

&timeStamps[i]
反过来,这也很简单

timeStamps + i

仅此而已:)

参数
timeStamps
的类型为
MyStructure*
,这意味着此行:

MyStructure *myStructure = &(*(timeStamps + i));
相当于:

MyStructure *myStructure = timeStamps + i;
MyStructure *myStructure = &timeStamps[i];
这也相当于:

MyStructure *myStructure = timeStamps + i;
MyStructure *myStructure = &timeStamps[i];

注意,在这个表达式中:
&(*(timeStamps+i))
,时间戳+i是指向索引
i
处元素的指针(即该元素的地址),然后使用返回类型为
MyStructure
的l值来取消对该元素的引用,然后使用运算符(
&
)的地址来检索该元素的地址,该地址等于
时间戳+i
在开始时保留的地址。

自从我在C工作以来,已经有一段时间了,但据我记忆所及,方括号索引运算符([])与添加到指针相同。因此:

时间戳[i]
应等同于
*(时间戳+i)

因此,您应该能够使用

myStructure=&timeStamps[i]
我建议:

void Process(MyStructure *timeStamps, int arrayLength){
    for (MyStructure *i = timeStamps; i < timeStamps + arrayLength; i++) {
        if (i->isUsed == true) {
void进程(MyStructure*时间戳,int-arraylelength){
for(MyStructure*i=时间戳;i<时间戳+数组长度;i++){
如果(i->isUsed==true){