Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在下面的代码块中指针是如何工作的?_C_Pointers - Fatal编程技术网

C 在下面的代码块中指针是如何工作的?

C 在下面的代码块中指针是如何工作的?,c,pointers,C,Pointers,我试图理解指针是如何工作的,我被这段代码卡住了。有人能解释一下表达式“*(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

我试图理解指针是如何工作的,我被这段代码卡住了。有人能解释一下表达式“*(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;
}
#包括
int main()
{ 
INTA[5]={1,2,3,4,5},b[5]={10,20,30,40,50},tally;
用于(计数=0;计数<5;++计数)
{
*(a+理货)=*(理货+a)+*(b+理货);
}
用于(计数=0;计数<5;计数++)
{
printf(“%d”*(a+tally));
}
返回0;
}

例如,此表达式

*(a+tally)
a[tally]
a + tally
tally + a
与表达式相同

*(a+tally)
a[tally]
a + tally
tally + a
并在索引
tally
处生成数组的(左值)元素

因此,这个循环

for(tally=0;tally< 5;++tally)
{
    *(a+tally)= *(tally+a) + *(b+tally);
}
或等效表达式

*(a+tally)
a[tally]
a + tally
tally + a
指向数组
a
的元素,其索引等于
tally
的值


请注意,由于表达式
a[tally]
的计算方式类似于
*(a+tally)
或作为
*(tally+a)
(由于加法的交换性质),因此表达式
a[tally]
也可以像
tally[a]
一样重写,这更容易阅读吗<代码>a[tally]+=b[tally]相关:表达式
*(a+tally)
不指向任何内容。表达式
a+tally
a
元素的地址,
*(a+tally)
是该地址处的对象<代码>a有5个元素
a+0
是第一个元素的地址,
a+1
是下一个元素的地址,以此类推。
a+(i-1)
是第i个元素的地址。所以,
a+4
是第五个元素的地址。
tally[a]
:我以前从未见过这个,太奇怪了。。无论如何,谢谢你的信息!