QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1139|回复: 8

一个例程的疑问!!!!请各位帮忙看一下!!

[复制链接]
发表于 2003-1-13 10:55:17 | 显示全部楼层 |阅读模式
要求:调用子函数,求一维数组中的最大元素.
[code:1]#include<stdio.h>
main()
{
        int sub_max();
        int n,a[10],*ptr=a;
        int max;
        for(n=0;n<=9;n++)
                scanf("%d",&a[n]);
        max=sub_max(ptr,10);
        printf("max=%d\n",max);
}


int sub_max(b,i)
int *b,i;
{
        int temp,j;
        temp=b[0];                                /*把b[0]赋给temp */
        for(j=1;j<=9;j++)
                if(temp<b[j])        temp=b[j];
                return temp;
        }

[/code:1]
在sub_max()中没有定义b[]而把b[0]赋给了tepm,只定义了*b,为什么程序能正确编译并运行??
发表于 2003-1-13 11:03:19 | 显示全部楼层
int *b=int b[]
回复

使用道具 举报

 楼主| 发表于 2003-1-13 11:14:58 | 显示全部楼层
能这样定义啊?
为什么呢?
好像应该先 int b[],*p;再才有p=&b[0] or p=b;
能解释一下吗???
回复

使用道具 举报

发表于 2003-1-13 11:29:28 | 显示全部楼层
这可是c的基础知识哟。b相当于遍历的指针。
回复

使用道具 举报

 楼主| 发表于 2003-1-13 11:40:21 | 显示全部楼层
[quote:9b80e0aa38="atom113"]这可是c的基础知识哟。b相当于遍历的指针。[/quote]
是啊,所以我要把例程都要搞清楚!!!
遍历的概念不明白,能不能这样理解:
数组在内存中是连续存放的,指针也可以访问他后面连续的内存地址,所以指针也相当于数组???
回复

使用道具 举报

 楼主| 发表于 2003-1-13 11:45:42 | 显示全部楼层
遍历的概念找到了,我是自学,所以好多东西不懂,还希望各位多多指点!!先谢谢!!
回复

使用道具 举报

发表于 2003-1-13 13:34:50 | 显示全部楼层
在c语言中这当然是合法的,你可以用指针指向任意一个地址,也可以继续无限制遍历下去。 i.e. 不要说是你指向的是一个数组,只要不断的"p++",挨着这块数组的地址你都可以指过去,但所指的东西是什么,只有天知道了。所以从程序员的角度来说这是可怕的,它将导致你难以想象的错误,所以判断指针的合法,是一个c语言程序员必需的要做的,切记!!
回复

使用道具 举报

发表于 2003-1-13 14:16:56 | 显示全部楼层
在里奇的UNIX源代码里到处可见这种例程

用好了,极为灵活;用不好,一命呜呼
回复

使用道具 举报

 楼主| 发表于 2003-1-13 15:33:22 | 显示全部楼层
再次感谢各位!!!
你们的提醒我一定铭记在心!!!
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-16 14:31 , Processed in 0.045719 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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