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){