标题:从子子程序调用子程序指向的变量@_@,地址是错的……
只看楼主
sunb3
Rank: 2
来 自:北京
等 级:论坛游民
威 望:3
帖 子:34
专家分:94
注 册:2017-4-20
结帖率:100%
已结贴  问题点数:10 回复次数:3 
从子子程序调用子程序指向的变量@_@,地址是错的……
如题:
plus_one和plus_two是sum的子函数,是main的子子函数,sum是main的子函数。
SUM调用plus_one和plus_two把目标增加1和2,并根据返回的值返回是否计算成功的状态(其实必然返回TRUE才对)
但是这个过程中的参数i的值却一直都没有变……

程序代码:
#include <stdio.h>
#define TRUE  1;
#define FALSE 0;

typedef unsigned short int BOOL;

BOOL plus_one(int *);
BOOL plus_two(int *);
BOOL SUM(int *);

int main(void) {
    int i = 0;
    printf("I - Addr: 0x%p\n\n",&i);
    if (SUM(&i)) {
        printf("SUCC: %d\n",i);
    }
    else {
        printf("Uhm...",i);
    }
    getchar();

    return 0;
}

BOOL plus_one(int *n) {
    printf("Welcome to Plus1!\n");
    n += 1;
    printf("p1_n - Addr: 0x%p\n\n", &n);
    return TRUE;
}

BOOL plus_two(int *n) {
    printf("Welcome to Plus2!\n");
    n += 2;
    printf("p2_n - Addr: 0x%p\n\n", &n);
    return TRUE;
}

BOOL SUM(int *n) {
    printf("sum_n - Addr: 0x%p\n\n", n);
    return (plus_one(n) && plus_two(n));
}


运行后结果是:


为什么plus_one和plus_two的地址和sum的n不一致?该怎么更正?
搜索更多相关主题的帖子: 子程序 
2017-04-24 08:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
程序代码:
BOOL plus_one(int *n) {
    printf("Welcome to Plus1!\n");
    *n += 1;
    printf("p1_n - Addr: 0x%p\n\n", n);
    return TRUE;
}

BOOL plus_two(int *n) {
    printf("Welcome to Plus2!\n");
    *n += 2;
    printf("p2_n - Addr: 0x%p\n\n", n);
    return TRUE;
}
2017-04-24 08:49
sunb3
Rank: 2
来 自:北京
等 级:论坛游民
威 望:3
帖 子:34
专家分:94
注 册:2017-4-20
得分:0 
感谢提点!我果然指针的底子还很差啊……

除了基础……我什么都不会……
2017-04-24 10:32
kelehaier
Rank: 2
等 级:论坛游民
帖 子:12
专家分:39
注 册:2011-11-13
得分:0 
指针这个东东确实不太好掌握,关键是指针具有一般变量的特性时,还有一个指向的特性,即通过*来获取一个值。
鉴于此,我最近写了一个系列,关于指针的系列,有兴趣的朋友可以看看我的微博:http://
收到的鲜花
  • sunb32017-05-02 11:50 送鲜花  10朵   附言:谢谢

学习C语言,请关注微博与微信:C语言编程技术分享
2017-04-29 11:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-476378-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.774422 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved