首页 > 解决方案 > 指针如何在以下代码块中工作?

问题描述

我试图了解指针是如何工作的,我被困在这段代码中。有人能解释一下这个代码块中的表达式'*(a+tally)'指向哪里吗?其背后的逻辑是什么?

#include <stdio.h>
int main()
{ 
    int a[5]={1,2,3,4,5},b[5]={10,20,30,40,50},tally;
    
    for(tally=0;tally< 5;++tally)
    {
        *(a+tally)= *(tally+a) + *(b+tally);
    }
    
    for(tally=0;tally< 5;tally++) 
    {
        printf("%d" *(a+tally));
    }
    
    return 0;
}

标签: cpointers

解决方案


例如这个表达式

*(a+tally)

等价于表达式

a[tally]

并在 index 处产生数组的(左值)元素tally

结果这个循环

for(tally=0;tally< 5;++tally)
{
    *(a+tally)= *(tally+a) + *(b+tally);
}

相当于下面的循环

for(tally=0;tally< 5;++tally)
{
    a[tally] = a[tally] + b[tally];
}

那是表达

a + tally

或等价的表达式

tally + a

指向a索引等于 的值的数组元素tally

请注意,当表达式a[tally]被计算为 like*( a + tally )或 as 时*( tally + a )(由于加法的交换性质),那么表达式a[tally]也可能被重写为 like tally[a]


推荐阅读