tyf1218405122 发表于 2022-3-20 19:58:42

指针变量做函数参数

本帖最后由 tyf1218405122 于 2022-3-20 20:08 编辑

#include <stdio.h>

void fun(int *s)
{
       
        static int j=0;
       
        do
        {
                int j =0;
                s+=s;
        }while(++j<2);
}

int main(void)
{
       
        int k,a={1,2,3,4,5};
       
        for(k=1;k<3;k++)
        {
                fun(a);
       }
       
       for(k=0;k<5;k++)
       {
               printf("%d",a);
       }
}

打印出的结果是什么?
怎么来的?

gandixiwang 发表于 2022-3-20 20:15:52

结果是72345

jhq999 发表于 2022-3-20 20:18:23

本帖最后由 jhq999 于 2022-3-20 20:27 编辑

{:5_93:} 中招了
72345
静态变量j,第二次进入函数,j=2不是0所以加一次
1+2+2+2

gandixiwang 发表于 2022-3-20 20:30:04

怎么来的这个解释比较困难。。

tyf1218405122 发表于 2022-3-20 20:45:08

jhq999 发表于 2022-3-20 20:18
中招了
72345
静态变量j,第二次进入函数,j=2不是0所以加一次


明白啦 谢谢谢

tyf1218405122 发表于 2022-3-20 20:45:42

gandixiwang 发表于 2022-3-20 20:30
怎么来的这个解释比较困难。。

刚才明白啦感谢

tyf1218405122 发表于 2022-3-20 20:59:32

jhq999 发表于 2022-3-20 20:18
中招了
72345
静态变量j,第二次进入函数,j=2不是0所以加一次


那第二次进入函数的时候不是a【2】=7吗?
最后进行打印的时候不是   3 5 7 4 5吗

tyf1218405122 发表于 2022-3-20 21:01:58

jhq999 发表于 2022-3-20 20:18
中招了
72345
静态变量j,第二次进入函数,j=2不是0所以加一次


为什么最后只改变了a的值啊

jhq999 发表于 2022-3-20 21:11:40

本帖最后由 jhq999 于 2022-3-20 21:14 编辑

tyf1218405122 发表于 2022-3-20 21:01
为什么最后只改变了a的值啊

do
      {
                int j =0;////这个j,它的作用域只在循环体里,外面的j不作用在这里面,它也影响不到外面的j,而且j始终被赋值为0
                s+=s;//
      }while(++j<2);

tyf1218405122 发表于 2022-3-20 21:17:04

jhq999 发表于 2022-3-20 21:11


如果去掉里面的   int j=0;
那结果就应该是 35 7 4 5了

jhq999 发表于 2022-3-20 21:33:38

tyf1218405122 发表于 2022-3-20 21:17
如果去掉里面的   int j=0;
那结果就应该是 35 7 4 5了

页: [1]
查看完整版本: 指针变量做函数参数