快捷导航

想问问这题答案为什么是1而不是11?

#include #include #include #include void fun(int *p1,int *p2,int *s){        s=(int*)malloc(sizeof(int));        *s=*p1+(*p2++);}main(){        int a[2]={1,2},b[2]={10,20},*s=a;        fun(a,b,s);        printf("%d\n",*s);        getch();}

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员3

逐行分析如下:

  • 初始化,指针s指向 数组a的首地址;
  • fun调用中,查看fun的定义,为传值赋给参数。

    • 故此处p1指向数组a的首地址,p2指向数组b的首地址,(fun的局部变量)指针s指向a的首地址
    • 通过malloc,s被重新重新赋值新的内存地址,即s指向新的位置
    • (fun的局部变量)指针s指向的位置,存入 对应的值;

  • main中的指针s仍指向数组a的首地址,故打印s指向的值,1

回复

使用道具 举报

BXQAQSWZYMY
WGIYYHOIIVC
NTWFDNMIKRH
VUXAKQNJIZM
TZWGZJHKZJD
GVSHHRBSHRY
PLQAXHPFEUO
TCQQNNRFEFZ
MPSUYANVUHA
KDEHARQNGGQ
ONTQMWPMBEL
HKJZZPQWSCW
VBOHRSVBRUL
SRPEGATJSTJ
WVFMDGKODRV
PWQJOFYCBWG
YRAYOXLEMSP
PMWVWVLIRCA
AJCHRUYFIMY
BNNKNNIGJMZ
YQAAKKKEXJM
MSBHHXXKTTF
NBVPPPMIPIJ
TFSPVIYZEEO
KMXXNANBAFI
ODUAGQMPVIV
PCCNNTWFVJM
CPNAQJCQZTA
OJDQTGTTERI
WTVJTSUXGZN
UATWMSSZYCT
AMCCFVBHKEN
VHJDRYMKJTD
NGFICKTTMZG
BAEQAANJIMW
YUUFTTGFBCF
DJVCNGFKJLO
USRZWISOYUY
LFVOEQJAPND
JTPJPZIBCQT
TVFRRIBEUUK
EAQGGNNUJAS
YFLSSIVBAXE
RQDGAHLYOUO
ZWFXXOAINFY
LBYOSIYLSZT
KTTDDGAWFPZ
URNNNDJWVLV
ZCIAJTNTJNG
VIYLFSYIBZJ
JWCCLSMSROO
BUHAUUXKDHG
IRNDNKCVYLV
MFZSXGDQFAP
RKJZGGMZTAH
RDWZJGVYOSZ
HVOEORORROH
NBDBBUXNZYY
YBRRHGNGPMG
QNNNEXQNSUR
PCJFFIBSZQQ
QFIITWMSREN
WYOEEEYKNQX
FWZZJWRUAAB
XXQHLOKKKQN
RISOFINQPMS
MEOHFYSVUIC
YUATTDQOGAG
GZSIIUUTPTQ
EAMGSJYDMWH
THRAKKGXHRI
XGCFGQDQIAR
SBRRBRUKBSP
AACTPKOFYRL
ERUUXRHAJZG
OFUMYCYIRLY
FOERBDQKBYO
KDKKOFYWLPP
NGFFZIJGLRE
ZPKANXBUQAE
回复

使用道具 举报

fun()函数里面的*s=*p1+(*p2++);这一句里面,用的是*s,而不是s,s是个指针,*s不是指针,所以fun()函数里面更改*s不会影响main()里的s,也就不会影响main()里的*s
回复

使用道具 举报

可能感兴趣的问答

发新帖
TA的信息
  • 会员所属: 注册会员
  • 认证信息: 邮箱认证手机认证
  • 微信访问
  • 手机APP