标题: 在网上看到一道C语言指针题,求分析 [打印本页]

作者: 19970623    时间: 2019-9-27 15:37
标题: 在网上看到一道C语言指针题,求分析
#include<stdio.h>
int *p;
main()
{
int a=1,b=2,c=3;
p=&b;
pp(a+c,&b);
        printf("(1) %d %d %d\n",a,b,*p);
}
pp(int a,int *b)
{
int c=4;
*p =*b+c;
a=*p-c;
        printf("(2) %d %d %d\n",a,*b,*p);
}
结果是: (2) 2 6 6
            (1) 1 6 6




我认为是 (2) 2 2 6
              (1) 1 2 6


大家说说看。

作者: csmyldl    时间: 2019-9-27 18:01
(2) 2 6 6
(1) 1 6 6
这个结果是对的
作者: csmyldl    时间: 2019-9-27 18:07
主程序调用pp(a+c,&b);时 即pp(4,2);  在子程序中*p=2+4=6 , a=6-4=2 ,子程序中的*b是b变量的地址,通过这一条语句*p =*b+c;已经改变为6了
作者: dongxx    时间: 2019-9-27 19:13
我没仔细看代码,但我看到p=&b;而且没有其它地方对p进行赋值,即p中存的是b的地址,所以*p和b的值应该是相同的,所以你的记过应该不对。
作者: dongxx    时间: 2019-9-27 19:15
还有你提问时,你说你认为结果是什么,你应该把你这么认为的原因也写出来,方便别人给你分析,如果有问题更容易指出来。
作者: CTW.    时间: 2019-9-27 20:01
我得到的结果也是
(2) 2 6 6
(1) 1 6 6
看了楼主的结果,只能说楼主对指针理解的不够透彻

作者: 黄youhui    时间: 2019-9-27 21:38
你p=&b的时候就已经确认国*p=b关系了,
作者: cuihaodianzi    时间: 2019-9-27 22:56
我这个人比较懒,不喜欢算算算……

20190927225216.png (2.33 KB, 下载次数: 72)

就这样啊

就这样啊

作者: jianfeii    时间: 2019-9-28 00:22
主要是取了地址,进入函数以后一起改变了,所以答案是没错的
作者: 叫我红领巾    时间: 2019-9-28 10:59
有图有真相

1.png (2.33 KB, 下载次数: 49)

1.png

作者: 多少分多少分    时间: 2019-9-28 11:05
指针指向了那个变量,所以是266和126




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1