VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 483|回复: 6

[求助] 利用函数,指针,数组。三个知识写的选择排序法。还有一些问题要请教

[复制链接]
07_avatar_middle
online_member Acher陈 发表于 2018-2-8 15:11:50 | 显示全部楼层 |阅读模式
3驿站币
利用的函数,指针,数组实现的用户任意输入一个数(前提是比定义的数组的大小更小)再通过用户输入数组中的每一个元素。利用函数中的选择排序法实现对数组中的元素的排序。
源代码如下:
# include<stdio.h>
void Array();
void Compare_Array(int *Array, int i);
void Print_Array(int *array, int i);
void Array()
{
        int i = 0;
        int array[100];
        printf("please input array scope\n");
        scanf("%d", &i);
        printf("please input array's number\n");
        for (int a = 0; a < i; a++)
        {
                scanf("%d", &array[a]);

        }
        Compare_Array(array, i);
        Print_Array(array, i);
}
void Compare_Array(int *array, int i)
        {
                for (int a = 0; a < i; a++)
                {
                        int k = a;
                        for (int j = a + 1; j < i;j++)
                        {
                                if (array[k]>array[j])
                                {
                                        k = j;
                                }
                        }
                        int temp = 0;
                        temp = array[a];
                        array[a] = array[k];       
                        array[k] = temp;

                }
       
        }
void Print_Array(int *array,int i)
        {
                for (int a = 0; a < i;a++)
                {
                        printf("%d\t", array[a]);
                }

        }
void main()
{
        Array();

}

我想问的问题是
1、在void Compare_Array(int *array, int i)函数中,形参是指针,但是在调用函数的时候,实参是array;是数组名称,这个怎么理解呢?
2、在void Compare_Array(int *array, int i)函数中,int temp = 0;  temp = array[a];  array[a] = array[k];  array[k] = temp;这段代码。最初我是想用int temp = 0;  temp = *array[a];  *array[a] = *array[k];  *array[k] = temp;但是在编译时编译器报错;我的想法是*符号不是取值符号吗?运用这个符号,就是取array数组里面的内容,通过这段交换值得代码完成操作。为什么错了?是什么地方理解错了吗?
书上有一段代码,如下:
void main()
{
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
{
*p++=1;
}
p=a;
for(i=0;i<10;I++)
{
printf("%6d",*p++);
}
}
在这段代码中,*p++=1;等价于*(p++)意思就是把数组中元素进行赋值吗?*就是取值,上面说到得问题就是在这儿理解到得。
先提前感谢帮助我的人了。

最佳答案

查看完整内容

1、数组名就是数组的首地址,例如: int des[10] = {1, 2, 3}; 那么 int* p = des; 一点问题没有! 2、 这几行代码是将数组中的下标位a和k的元素的值互换。 3、数组名字 array 就表示数组的首地址了,array[0] 就是数组的第0个元素了,即已经是int类型的元素了,不是指针或者地址了,你在前面再加个 * 是什么意思呢?肯定报错了啊 4、 int *p, a[10]; p = a; a是数组名字,就是数组的首地址,指针变量p指向了a ...

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-2-8 15:11:51 | 显示全部楼层
1、数组名就是数组的首地址,例如:
int des[10] = {1, 2, 3};
那么 int* p = des;
一点问题没有!

2、
  1. int temp = 0;
  2. temp = array[a];
  3. array[a] = array[k];
  4. array[k] = temp;
复制代码

这几行代码是将数组中的下标位a和k的元素的值互换。

3、数组名字 array 就表示数组的首地址了,array[0] 就是数组的第0个元素了,即已经是int类型的元素了,不是指针或者地址了,你在前面再加个 * 是什么意思呢?肯定报错了啊

4、
int *p, a[10];
p = a;
a是数组名字,就是数组的首地址,指针变量p指向了a所以也指向了数组的首地址。
所以,p++执行一次,p就往后移动一个位置。
p = a; 即p指向了数组的首地址,也就是数组元素0的地址;
p++ 执行完了之后,p就往后移动一个位置,就指向了数组元素1的地址,以此类推!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

07_avatar_middle
ico_lz  楼主| Acher陈 发表于 2018-2-9 00:09:17 | 显示全部楼层
Syc 发表于 2018-2-8 15:58
1、数组名就是数组的首地址,例如:
int des[10] = {1, 2, 3};
那么 int* p = des;

谢谢,这个我理解到了。但是还有个问题就是有一个代码给了我不一样的感觉,代码如下:

#include<stdio.h>
void sum(int *a, int*b,int*out);
void sum(int *a, int*b,int*out)
{
int result = 0;
result = *a + * b;
*out = result;
printf("%d",*out);
}
void main()
{
int a = 10, b = 11,out = 0;
sum(&a,&b,&out);
}

在这一段代码中就可以使用* a  或者*b来读取或者改变这个变量的值,为什么在我之前的代码中 array数组中间不能使用*array[a]之类的来改变数组中的值呢?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

07_avatar_middle
ico_lz  楼主| Acher陈 发表于 2018-2-9 00:42:37 | 显示全部楼层
Syc 发表于 2018-2-8 15:58
1、数组名就是数组的首地址,例如:
int des[10] = {1, 2, 3};
那么 int* p = des;

与之前的比较,搞不清楚与下面这样的变形有什么区别。

版本一:
#include<stdio.h>
void sum(int *a, int *b, int *out)
{
        int result = 0;
        result =* a + *b;
        *out = result;
        printf("%d", *out);
}
void main()
{
        int a = 10, b = 11, out = 0;
        sum(&a, &b, &out);
}
版本二:
#include<stdio.h>
void sum(int &a, int &b, int &out)
{
        int result = 0;
        result = a + b;
        out = result;
        printf("%d", out);
}
void main()
{
        int a = 10, b = 11, out = 0;
        sum(a, b, out);
}
这个第一个版本和第二个版本的区别是什么呢?是形参的类型吗?第一种形参是指针类型;第二种应该也是指针类型啊!但是第一种的函数内的ab可以加*;第二种的函数内就不能够加*了?我的问题就是这儿。谢谢

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-2-9 09:41:46 | 显示全部楼层
Acher陈 发表于 2018-2-9 00:09
谢谢,这个我理解到了。但是还有个问题就是有一个代码给了我不一样的感觉,代码如下:

#include

数组名字 array 本身就是数组的首地址了,*array 就是第0个元素,也就是 array[0],所以 array[0]、array[1] 都是真正的数组元素,已经是 int 类型的了,你还要在前面加 * 肯定没意义啊

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

07_avatar_middle
ico_lz  楼主| Acher陈 发表于 2018-2-9 14:08:08 | 显示全部楼层
Syc 发表于 2018-2-9 09:41
数组名字 array 本身就是数组的首地址了,*array 就是第0个元素,也就是 array[0],所以 array[0]、array ...

懂啦 懂啦,谢谢

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-5-24 10:06

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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