[英]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.