有如下程序 #include <stdio.h> int* sum(int data) { static int init = 0; init += data; return &init; } main() { int i

admin2021-04-28  32

问题 有如下程序
#include <stdio.h>
int* sum(int data)
{
    static int init = 0;
    init += data;
    return &init;
}
main()
{
    int i, *p;
    for (i=1; i<=4; i++) sum(i);
    p = sum(0);
    printf("%d\n", *p);
}
程序运行后的输出结果是

选项 A、15
B、0
C、1
D、10

答案D

解析 static变量又称为静态变量,编译时,将其分配在内存的静态存储区中,在整个程序运行期间都不释放这些存储单元,即使退出函数,下次再进入该函数时,静态局部变量仍使用原来的存储单元,值是上一次函数调用结束时的值。若定义时未赋初值,在编译时,系统自动赋初值为0;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值。程序执行过程为:执行for循环,i=1,调用函数sum(1),data=1,init=0,init=init+data=1;i=2,调用函数sum(2),data=2,init=1,init=init+data=3;i=3,调用函数sum(3),data=3,init=3,init=init+data=6;i=4,调用函数sum(4),data=4,init=6,init=init+data=10;i=5退出for循环。调用函数sum(0),data=0,init=10,init=init+data=10,返回指向init的指针,输出init=10。D选项正确。
转载请注明原文地址:https://kaotiyun.com/show/DFtp777K
0

最新回复(0)