| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 952 人关注过本帖
标题:指针基础问题
只看楼主 加入收藏
雨落北川
Rank: 2
等 级:论坛游民
帖 子:46
专家分:42
注 册:2012-7-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:25 
指针基础问题
#include <stdio.h>


/*
   本意是想通过swap函数,交换两个指针变量存放的两个变量的地址,但目测该函数完全无效
*/
void swap( int *pointer_1, int *pointer_2)
{
    int *p;

    p = pointer_1;   
    pointer_1 = pointer_2;
    pointer_2 = p;
}

int main(void)
{
    int i;
    int j;
    int *pointer_max;
    int *pointer_min;

    scanf("%d",&i);
    scanf("%d",&j);

    pointer_max = &i;
    pointer_min = &j;
   
    if(i < j)
        swap(pointer_max, pointer_min);

    printf("max = %d , min = %d\n", *pointer_max,*pointer_min);
        

    return 0;
}

刚接触指针这一块,自己写了一个小程序,运行发现了有很大问题,但编译器并不报错、

具体如上所述,经过查资料,感觉问题是因为swap函数中定义的 int *变量 p,并没有一个确定值,导致p指向的单元不可预见

但还是不是十分明白,可以请高手详细讲解一下吗
搜索更多相关主题的帖子: void include 
2012-08-13 11:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
先搞清楚自己想干什么?你准确叙述一下交换两个变量的地址是什么意思?

授人以渔,不授人以鱼。
2012-08-13 11:46
雨落北川
Rank: 2
等 级:论坛游民
帖 子:46
专家分:42
注 册:2012-7-29
收藏
得分:0 
回复 2楼 TonyDeng
额 。。。
我的意思是,其实就是交换两个指针变量存放的内容。

404 NOT FOUND
2012-08-13 11:47
雨落北川
Rank: 2
等 级:论坛游民
帖 子:46
专家分:42
注 册:2012-7-29
收藏
得分:0 
回复 2楼 TonyDeng
我的意思是初始情况下 pointer_max是指向变量i的,如果发现 i < j 则使pointer_max指向j,pointer_min指向i、

这样描述没问题吧,大神

404 NOT FOUND
2012-08-13 11:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
指针变量存放的是地址,没有存放内容,一个地址而已。指针变量的值就是地址,你想交换地址还是交换内容?交换地址意味着什么,交换内容又意味着什么?

授人以渔,不授人以鱼。
2012-08-13 11:50
雨落北川
Rank: 2
等 级:论坛游民
帖 子:46
专家分:42
注 册:2012-7-29
收藏
得分:0 
void swap( int *pointer_1, int *pointer_2)
{
    int p;

    p = *pointer_1;   
    *pointer_1 = *pointer_2;
    *pointer_2 = p;
}

将swap函数如上改写后,问题排除,然后感觉更加疑惑

404 NOT FOUND
2012-08-13 11:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用雨落北川在2012-8-13 11:50:08的发言:

我的意思是初始情况下 pointer_max是指向变量i的,如果发现 i < j 则使pointer_max指向j,pointer_min指向i、

这样描述没问题吧,大神

i和j本身就有地址,你只需要直接比较i、j的大小,令pointer_max指向大的那个即可。比如i>j,那么pointer_max = &i,否则=&j,这需要用什么指针函数交换吗?

不要学东西不明白自己在干什么的好不好。

授人以渔,不授人以鱼。
2012-08-13 11:53
雨落北川
Rank: 2
等 级:论坛游民
帖 子:46
专家分:42
注 册:2012-7-29
收藏
得分:0 
回复 5楼 TonyDeng
其实是这样的,我的要求是保持i,j的值不发生改变,同时保证pointer_max指向较大的,pointer_min指向较小的.


404 NOT FOUND
2012-08-13 11:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
7楼就是你要的答案

授人以渔,不授人以鱼。
2012-08-13 11:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这是现代版《郑人买履》,有真身不用,偏要用尺寸。

授人以渔,不授人以鱼。
2012-08-13 11:54
快速回复:指针基础问题
数据加载中...
 
   



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

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