标题:指针地址的问题
只看楼主
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
已结贴  问题点数:20 回复次数:2 
指针地址的问题
问题在代码红色区域!!!
#include<stdio.h>
#include<string.h>
int main()
{
    void input (int *num);
    void value (int *num);
    void output (int *num);
    int number[10];
    input (number);
    value (number);
    output (number);
    return 0;
}

void input (int *num)
{
    int i;
    for (i=0; i < 10; i++)
    scanf("%d", &num[i]);
}

void value (int *num)
{
    int *max, *min, temp, *p;
    max = min = p = num;   让p存放num指针的地址
    for (p; p < num + 10; p++)
    if (*min > *p)
    min = p;
    else if (*max < *p)
    max = p;
    if (max == num)
    max=min;
    temp = num[0];                进行交换的时候用p[0]就会存在问题。用num[0]就正确。开头不是把num指针的首地址赋给p指针了吗?用p[0]进行交换,难道只是改变的p指针的地址的值,num指针的地址没变化
    num[0] = *min;
    *min = temp;
    temp = num[9];
    num[9] = *max;
    *max = temp;
}

void output (int *num)
{
    int *p;
    for (p = num; p< num+10; p++)
    printf("%d ",*p);
}
搜索更多相关主题的帖子: include number return 
2017-03-30 14:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
你修改了p呀
for (p; p < num + 10; p++)
2017-03-30 15:02
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
   max = min = p = num;  // 让p存放num指针的地址

你这想法就是错的。
C语言只有传值调用。因此实参传递给函数的只是一个值的拷贝。和普通变量不同在于,指针的值是一个地址。

你的这条语句的正确意思是, 将num的值赋值给p, min, max;

注意是实参的值,而不是实参本身。

你要让函数可以访问实参,那么必须传递实参自己的地址。

[此贴子已经被作者于2017-3-30 15:13编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-30 15:10



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




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

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