繁体   English   中英

C语言编程,使用指针

[英]C programming, use of pointers

我无法使用指针理解С中的以下代码

#include <stdio.h>
#include <stdlib.h>

int bags[5]={20,5,20,3,20};
int *next();

int main()
{
    int pos=5;
    *next()=pos;
    printf("%d,%d,%d",pos,*next(),bags[0]);
}

int *next()
{
    int i;
    for(i=0;i<5;i++)
    if(bags[i]==20)
        return(bags+i);
    printf("Error!");
}

谁能解释为什么ans是20,5,20

该程序的输出为

5,20,5

因为

if(bags[i]==20)
        return(bags+i);

返回指针bags[0]因为bags[0]==20和返回是一个指向它的指针和

*next()=pos;

pos值写入由next()返回的地址指向的地址,即bags[0]=pos=5

next该函数返回一个指向第一个等于20的数组元素的指针。 *next()=pos; 会将数组的第一个元素从20修改为5。然后很容易理解为什么输出为5,20,5 :由于pos为5,因此5,20,5*next()返回20, bags[0]为5 。

输出为5,20,5

注意: int *next(); ==> next()是一个返回int*的函数。

[1]从*next() = pos;行调用next() *next() = pos; C从左开始评估函数,因此将首先调用next() 由于if (bags[i] == 20) ,函数next()返回bags+i ,因为i当时为0 ,所以它只是bags 所以next()返回bags的地址,这意味着*next()只是指向bags[0]的指针。 因此bags[0]变为5

[2]当执行到此行时: printf("%d,%d,%d",pos,*next(),bags[0]); ,它打印pos值,即5*next()值是20因为next()返回bags[0]的地址。

[3] *next()打印20因为这一次下一次将返回bags[2]的地址,因为bags[0]printf()之前的行中分配了pos的值。

[4]最后, bags[0]5 请参阅[1]中的说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM