找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1199|回复: 10
收起左侧

在网上看到一道C语言指针题,求分析

[复制链接]
ID:445798 发表于 2019-9-27 15:37 | 显示全部楼层 |阅读模式
#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


大家说说看。
回复

使用道具 举报

ID:235200 发表于 2019-9-27 18:01 | 显示全部楼层
(2) 2 6 6
(1) 1 6 6
这个结果是对的
回复

使用道具 举报

ID:235200 发表于 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了
回复

使用道具 举报

ID:617312 发表于 2019-9-27 19:13 | 显示全部楼层
我没仔细看代码,但我看到p=&b;而且没有其它地方对p进行赋值,即p中存的是b的地址,所以*p和b的值应该是相同的,所以你的记过应该不对。
回复

使用道具 举报

ID:617312 发表于 2019-9-27 19:15 | 显示全部楼层
还有你提问时,你说你认为结果是什么,你应该把你这么认为的原因也写出来,方便别人给你分析,如果有问题更容易指出来。
回复

使用道具 举报

ID:577820 发表于 2019-9-27 20:01 | 显示全部楼层
我得到的结果也是
(2) 2 6 6
(1) 1 6 6
看了楼主的结果,只能说楼主对指针理解的不够透彻
回复

使用道具 举报

ID:592807 发表于 2019-9-27 21:38 | 显示全部楼层
你p=&b的时候就已经确认国*p=b关系了,
回复

使用道具 举报

ID:149144 发表于 2019-9-27 22:56 | 显示全部楼层
我这个人比较懒,不喜欢算算算……

就这样啊

就这样啊
回复

使用道具 举报

ID:142699 发表于 2019-9-28 00:22 | 显示全部楼层
主要是取了地址,进入函数以后一起改变了,所以答案是没错的
回复

使用道具 举报

ID:370779 发表于 2019-9-28 10:59 | 显示全部楼层
有图有真相
1.png
回复

使用道具 举报

ID:498638 发表于 2019-9-28 11:05 | 显示全部楼层
指针指向了那个变量,所以是266和126
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表