| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1408 人关注过本帖
标题:本人C语言全靠自学,指针函数学的一般,请大神看看,怎么能保证数组a的值不 ...
只看楼主 加入收藏
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
结帖率:90%
收藏
已结贴  问题点数:10 回复次数:4 
本人C语言全靠自学,指针函数学的一般,请大神看看,怎么能保证数组a的值不变
void changed(int b[], size_t);
main(void)
{
    int a[10] = { 10,3,90,100,90,4,5,1,2,100 };
    char *c = &a[0];
    changed(c, 10);
    for (size_t i = 0;i < 10;++i)
    {
        printf("%d ", a[i]);
    }
    return 0;
}
void changed(int b[], size_t count)
{
    int ptemp = 0;
    for (size_t i = 0;i < count - 1;++i)
    {
        for (size_t j = i;j < count;++j)
        {
            if (b[i] > b[j])
            {
                ptemp = b[i];
                b[i] = b[j];
                b[j] = ptemp;
            }
        }
    }
    for (size_t i = 0;i < count;++i)
    {
        printf("%d ", b[i]);
    }
    printf("\n");
}

数组a排序后按从小到大顺序排列,但是,本身数组a的顺序也被改写了,如何保证数组a的顺序不改变
2016-01-04 20:24
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
在函数changed定义一个主函数数组的备份,对备份数组排序即可。

能编个毛线衣吗?
2016-01-04 20:27
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
回复 2楼 wmf2014
能给个例子吗,是在自定义函数中在定义一个指针吗
2016-01-04 20:32
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
你主函数的指针定义语句char *c = &a[0]应该改为int *c = &a[0]。排序函数修改如下:
void changed(int b[], size_t count)
{
    int ptemp = 0,a[10];
    for(size_t k=0;k<count;k++)a[k]=b[k];
    for (size_t i = 0;i < count - 1;++i)
    {
        for (size_t j = i;j < count;++j)
        {
            if (a[i] > a[j])
            {
                ptemp = a[i];
                a[i] = a[j];
                a[j] = ptemp;
            }
        }
    }
    for (size_t i = 0;i < count;++i)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
}

能编个毛线衣吗?
2016-01-04 21:03
Yuzai酱
Rank: 2
等 级:论坛游民
帖 子:18
专家分:67
注 册:2016-1-4
收藏
得分:0 
#include<stdio.h>   //这里没加头文件

void changed(int * Pb, size_t count);
 
int main(void)//根据最新规定,主函数应写成 int main()
{
    int a[10] = { 10,3,90,100,90,4,5,1,2,100 };
   
    //int *c = &a[0];
   
    int b[10] = { 0 };//新定义数组b[]
    int *c;//定义指针c
    for (int i = 0;i < 10;++i)
    {
        b[i] = a[i];
    }
       /*
    **数组定义的是int型,你却赋给了char型
    **其实数组"a[]"中的”a“就是地址,
    **你写成int *c = &(a[0]); 和 int * c = a; 是等价的
    */
   
    c = b; //因为数组b[]中的b就是数组的头地址,所以直接赋给指针c
    changed(c, 10);
    /*
    **这里,你要把数组b[]的地址,也就是指针c
    **传递给changed函数的形参int *Pb
    */
    printf("未排序的数组a[]为:\n");
    for (size_t i = 0;i < 10;++i)
    {
        printf(" 数组a[%d] = %d \n",i,a[i]);
    }
    printf("\n");
    return 0;
}
void changed(int *Pb, size_t count)
{
   
    int ptemp = 0;
 
    for (size_t i = 0;i < count;++i)
    {
        for (size_t j = i;j < count;++j)
        {
            if (Pb[i] > Pb[j])
            {
                ptemp = Pb[i];
                Pb[i] = Pb[j];
                Pb[j] = ptemp;
            }
        }
    }
    printf("排序完的数组b[]为:\n");
    for (size_t i = 0;i < count;++i)
    {
        printf(" 数组b[%d] = %d \n",i,Pb[i]);
    }
    printf("\n");   
}


[此贴子已经被作者于2016-1-4 21:27编辑过]

2016-01-04 21:24
快速回复:本人C语言全靠自学,指针函数学的一般,请大神看看,怎么能保证数组a的 ...
数据加载中...
 
   



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

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