哈哈哈的 发表于 2019-3-20 22:43:38

这个程序的输出结果没有看懂欸

#include<stdio.h>
int *f(int *s)
{
        s+=1;
        s+=6;
        *s++ +=7;
        return s;}
void main()
{
        int a={1,2,3,4,5},*p;
        p=f(&a);
        printf("%d,%d,%d,%d",a,a,*p,p);
}





子函数不是很理解,可以详细地讲讲吗??谢谢各位啦

ba21 发表于 2019-3-20 22:53:26

没明白你说什么

jackz007 发表于 2019-3-20 23:22:21

#include<stdio.h>
int * f(int * s)
{
      s += 1      ; // s 本来指向 a,加 1 后,指向 a。
      s += 6   ; // s 实际上等效于 * = * + 6,也就是 a = a + 6 = 4 + 6 = 10
      * s ++ += 7 ; // s 指向 a,此句等效于 a = a + 7 = 3 + 7 = 10,然后 s 指向 a
      return s    ; // 返回 s 指向 a
}

int main(void)
{
      int a = {1 , 2 , 3 , 4 , 5} , * p                   ;
      p = f (& a)                                       ; // 函数参数指向 a,返回 p 指向 a
      printf("%d , %d , %d , %d" , a , a , * p , p) ; // a = 2,a = 10,* p = a = 10,p = a = 5
}

82457097 发表于 2019-3-20 23:28:51

#include<stdio.h>
int *f(int *s)
{
      s+=1;//s=&a s=a
      s+=6;//a=a+6=10
      *s++ +=7;//s=&a=a+7=10 这里好像是s地址先加一 然后s+=7吧
      return s;//s=a=4=p so p=a=5
}
int main()
{
      int a={1,2,3,4,5},*p;
      p=f(&a);
      printf("%d,%d,%d,%d",a,a,*p,p);
}

不太确定 如果不对 请大佬指正

My_A 发表于 2019-3-21 00:56:25

jackz007 发表于 2019-3-20 23:22


S最开始不是指向a吗?{:5_94:}

82457097 发表于 2019-3-21 08:09:35

My_A 发表于 2019-3-21 00:56
S最开始不是指向a吗?

传入的实参是&a1

jackz007 发表于 2019-3-21 09:49:34

本帖最后由 jackz007 于 2019-3-21 09:53 编辑

My_A 发表于 2019-3-21 00:56
S最开始不是指向a吗?

      p = f (& a);// & a 是传给 f() 的参数,就是指向 a 的指针
      在 f() 中,只要清楚地知道指针 s 的指向,看懂代码就不是难事了。

一点都不鱼的鱼 发表于 2019-3-21 16:42:47

jackz007 发表于 2019-3-20 23:22


大佬说得很清楚啦{:10_327:}

My_A 发表于 2019-3-21 20:17:10

jackz007 发表于 2019-3-21 09:49
p = f (& a);// & a 是传给 f() 的参数,就是指向 a 的指针
      在 f() 中,只 ...

哦哦 , 抱歉没注意

哈哈哈的 发表于 2019-3-24 16:52:13

谢谢大佬!!!{:5_106:}
页: [1]
查看完整版本: 这个程序的输出结果没有看懂欸