鱼C论坛

 找回密码
 立即注册
查看: 813|回复: 4

[已解决]初学者求问!

[复制链接]
发表于 2020-6-2 15:53:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
之前无编程经历,从小甲鱼c语言教程学习,想问一下如下代码:

#include <stdio.h>

int max,min;

void mxmn_valude(int array[],int n);

void main()
{
    int i,number[10];
    printf("输入10个数判断其最大值与最小值:\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&number[i]);
    }
    mxmn_valude(number,10);
    printf("\nmax=%d,min=%d\n",max,min);

}
void mxmn_valude(int array[],int n)
{
    int *p,*array_end;
    array_end=array+n;
    max=min=*array;
    for(p=array+1;p<array_end;p++)
    {
        if(*p>max)
        {
            max=*p;
        }
        else if(*p<min)
        {
            min=*p;
        }
    }
}

我想求问       array_end=array+n;  是什么意思?p=array+1; 呢?
谢谢大佬们
最佳答案
2020-6-2 16:27:48
首先,这个程序涉及到的知识点有指针、数组、传值等。你得先学到这里。
array_end=array+n;  是什么意思?
array是个数组名,数组名实际上就是数组首元素的地址,它的值是1,地址相当于&array[0]; emmm如果你没学到那些知识点,看不懂很正常。
array+n 就是在第一个地址的基础上往后移动了n个单元地址。其实就是最后一个元素之后的地址(实际上是越界了,但编译器不会去找,因为先不说了,C语言的一个优点——保证运行效率,随着你学你会明白的)
array_end是个指针,赋值到了array+n的地址
p=array+1
很简单喽,array往后的一个地址。 通俗点讲 就是数组元素2的地址

我加了点,帮助你理解
#include <stdio.h>

int max,min;

void mxmn_valude(int array[],int n);

void main()
{
    int i,number[10];
    printf("输入10个数判断其最大值与最小值:\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&number[i]);
    }
    mxmn_valude(number,10);
    printf("\nmax=%d,min=%d\n",max,min);

}
void mxmn_valude(int array[],int n)
{
    int *p,*array_end;
    array_end=array+n;
    printf("%p\n",array);
    printf("%p\n",&array[0]);
    printf("%d\n",array[0]);
    printf("%d\n",*array);
    max=min=*array;
    for(p=array+1;p<array_end;p++)
    {
        if(*p>max)
        {
            max=*p;
        }
        else if(*p<min)
        {
            min=*p;
        }
    }
    printf("%d\n",*array_end);
    printf("%p\n",array_end);
    printf("%p\n",&array[9]);
    printf("%d\n",array[9]);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-2 15:55:52 | 显示全部楼层
1.把array和n的和赋值给array_end
2.把array加一的值赋值给p
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 15:59:26 | 显示全部楼层
老八秘制 发表于 2020-6-2 15:55
1.把array和n的和赋值给array_end
2.把array加一的值赋值给p

为什么要把array和n的和给array_end,目的是什么?能详细说说嘛,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 16:27:48 | 显示全部楼层    本楼为最佳答案   
首先,这个程序涉及到的知识点有指针、数组、传值等。你得先学到这里。
array_end=array+n;  是什么意思?
array是个数组名,数组名实际上就是数组首元素的地址,它的值是1,地址相当于&array[0]; emmm如果你没学到那些知识点,看不懂很正常。
array+n 就是在第一个地址的基础上往后移动了n个单元地址。其实就是最后一个元素之后的地址(实际上是越界了,但编译器不会去找,因为先不说了,C语言的一个优点——保证运行效率,随着你学你会明白的)
array_end是个指针,赋值到了array+n的地址
p=array+1
很简单喽,array往后的一个地址。 通俗点讲 就是数组元素2的地址

我加了点,帮助你理解
#include <stdio.h>

int max,min;

void mxmn_valude(int array[],int n);

void main()
{
    int i,number[10];
    printf("输入10个数判断其最大值与最小值:\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&number[i]);
    }
    mxmn_valude(number,10);
    printf("\nmax=%d,min=%d\n",max,min);

}
void mxmn_valude(int array[],int n)
{
    int *p,*array_end;
    array_end=array+n;
    printf("%p\n",array);
    printf("%p\n",&array[0]);
    printf("%d\n",array[0]);
    printf("%d\n",*array);
    max=min=*array;
    for(p=array+1;p<array_end;p++)
    {
        if(*p>max)
        {
            max=*p;
        }
        else if(*p<min)
        {
            min=*p;
        }
    }
    printf("%d\n",*array_end);
    printf("%p\n",array_end);
    printf("%p\n",&array[9]);
    printf("%d\n",array[9]);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 16:41:26 | 显示全部楼层
Justin1 发表于 2020-6-2 16:27
首先,这个程序涉及到的知识点有指针、数组、传值等。你得先学到这里。
array_end=array+n;  是什么意思 ...

哦哦!明白了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 17:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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