找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1701|回复: 10
打印 上一主题 下一主题
收起左侧

在网上看到一道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


大家说说看。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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的值应该是相同的,所以你的记过应该不对。
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

7#
ID:592807 发表于 2019-9-27 21:38 | 只看该作者
你p=&b的时候就已经确认国*p=b关系了,
回复

使用道具 举报

8#
ID:149144 发表于 2019-9-27 22:56 | 只看该作者
我这个人比较懒,不喜欢算算算……

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

就这样啊

就这样啊
回复

使用道具 举报

9#
ID:142699 发表于 2019-9-28 00:22 | 只看该作者
主要是取了地址,进入函数以后一起改变了,所以答案是没错的
回复

使用道具 举报

10#
ID:370779 发表于 2019-9-28 10:59 | 只看该作者
有图有真相

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

1.png
回复

使用道具 举报

11#
ID:498638 发表于 2019-9-28 11:05 | 只看该作者
指针指向了那个变量,所以是266和126
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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