数组作为形参传递时的问题

songxinSQL 2009-04-25 07:04:02
#include <iostream.h>
int min(int a[],int number)
{
int min=a[0];
for(int j=1;j<number;j++)
{
if(a[0]>a[j])
{
min=a[j];
a[j]=a[0];
a[0]=min;
}
}
return min;
}

void main()
{
int a[5]={10,20,30,4,5};
cout<<min(a,5);
}
在数组传递时如果不传数组的个数,如何在min()函数获得数组的大小啊?
...全文
300 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
songxinSQL 2009-04-25
  • 打赏
  • 举报
回复
看来还是没有函数能够做到这点了,只能结贴了。
nickyjay0501 2009-04-25
  • 打赏
  • 举报
回复
传的只是个地址,无法得到数组大小!可以结贴了!
deltamaster 2009-04-25
  • 打赏
  • 举报
回复
sizeof(a)/sizeof(a[0])已经可以很好地计算出任何类型的数组的规模,可以将它作为数组规模传递给函数。
deltamaster 2009-04-25
  • 打赏
  • 举报
回复
至少按照我的知识,还没有函数可以做到这一点。
因为函数参数只有值、引用两种,并不存在数组这种特殊的形式,因此,顶多以一个指针的形式值传递过去,除了地址值和目标类型之外不携带其他任何信息,数组规模这一特性显然是不会随着数组名字传递进去的。
songxinSQL 2009-04-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 deltamaster 的回复:]
引用 6 楼 songxinSQL 的回复:
引用 1 楼 deltamaster 的回复:
sizeof(a)/sizeof(a[0])

sizeof(a)的结果是4,sizeof(a[0])也是4,根本算不出数组的个数啊。

这个要写在定义数组的同一个函数里面,而不是在这个函数调用的另一个函数里面写。
如果a作为参数传过去了,那么接受a的那个函数就认为这是一个int*类型的,大小是sizeof(void*),而不作为数组看待了。
[/Quote]
所以我说,就是不传递数组的个数,在min()函数里如何获取数组的个数啊?
你们给我的方法在min()函数里获取不到传递过来的数组的个数啊。
deltamaster 2009-04-25
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;

void F(int* a)
{
cout << "sizeof(a)=sizeof(void*)=" << sizeof(a) << endl;
}

int main()
{
int a[5];
cout << sizeof(a)/sizeof(a[0]) << endl;
F(a);
return 0;
}
deltamaster 2009-04-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 songxinSQL 的回复:]
引用 1 楼 deltamaster 的回复:
sizeof(a)/sizeof(a[0])

sizeof(a)的结果是4,sizeof(a[0])也是4,根本算不出数组的个数啊。
[/Quote]
这个要写在定义数组的同一个函数里面,而不是在这个函数调用的另一个函数里面写。
如果a作为参数传过去了,那么接受a的那个函数就认为这是一个int*类型的,大小是sizeof(void*),而不作为数组看待了。
songxinSQL 2009-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 deltamaster 的回复:]
sizeof(a)/sizeof(a[0])
[/Quote]
sizeof(a)的结果是4,sizeof(a[0])也是4,根本算不出数组的个数啊。
deltamaster 2009-04-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lpf000 的回复:]
int min(int *a)
{ int j=sizeof(a)/sizeof(int);
[/Quote]
呵呵,不如写成函数模板。
deltamaster 2009-04-25
  • 打赏
  • 举报
回复
可怜的我啊,到现在才4分。
lpf000 2009-04-25
  • 打赏
  • 举报
回复
int min(int *a)
{ int j=sizeof(a)/sizeof(int);

really3353 2009-04-25
  • 打赏
  • 举报
回复
定义一个宏吧
#define sz(a) (sizeof(a) / sizeof(a[0]))
deltamaster 2009-04-25
  • 打赏
  • 举报
回复
sizeof(a)/sizeof(a[0])

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧