VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 967|回复: 7

【实用C++】零基础入门教程21课课后作业疑问!

[复制链接]
85_avatar_middle
最佳答案
0 
donate_vip 发表于 2019-7-20 13:24:05 | 显示全部楼层 |阅读模式
小作业:
实现一个函数,作用是获取一个数组中的最大值和最小值,函数声明如下:
void get_min_max(int src[], int* max_v, int* min_v)
{
    //函数代码写在这个下面
}

源代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
int get_min_max(int src[], int* max_v, int* min_v)
{
        *max_v = src[0], *min_v = src[0];
        int len = sizeof(src) / sizeof(0);
        for (int x = 0; x <= len - 1; ++x)
        {
                *max_v = (*max_v > src[x]) ? *max_v : src[x];
                *min_v = (*min_v < src[x]) ? *min_v : src[x];
        }
        return(len);
}
int main()
{
        int a[] = { 43, -77, 454, 2, 6, 311 };
        int max, min, len;
        len = get_min_max(a, &max, &min);
        cout << "max=" << max << endl;
        cout << "min=" << min << endl;
        cout << "len为" << len << endl;
        return 0;
}
输出结果为
max=43
min=43
len为1

这里发现在函数里调用sizeof(src),实际获取的是*SRC指针的内存是4个字节,有没有办法在函数里获取数组形式参数指向数组的实际大小?这里实际a[]应该是6个元素。
1.png




上一篇:VC如何检查系统主音量是否静音?
下一篇:MFC如何判断系统主音量是否静音?最好给个代码,谢谢
51_avatar_middle
最佳答案
82 
online_admins 发表于 2019-7-22 23:04:32 | 显示全部楼层
嗯,这块楼主发现的问题确实存在。看来自己领悟到了
确实没有办法在函数内部获得数组的元素个数,这里可以把数组的元素个数通过函数参数传进去
这样就可以实现了
84_avatar_middle
最佳答案
0 
在线会员 发表于 2019-7-23 21:15:34 | 显示全部楼层
只会点C,不会C++,很尴尬
len不是恒为1吗?sizeof(src)和sizeof(0)不都等于sizeof(int)?
int len=0;
for(int i=0;i++;)
{
if ((src【i】/sizeof(0))!=0)            //可以除以任何正整数
len++;
else break;       //数组中没有0,有0的话就不会了
}
84_avatar_middle
最佳答案
0 
在线会员 发表于 2019-7-23 21:21:22 | 显示全部楼层
只学过C,没学过C++。。。
sizeof(src)和sizeof(0)不都等于是sizeof(int)吗?所以len恒为1.
int len=0;
for(int i=0;i++)
{
if (src(i)!=0)
len++;
else break;  //前提是,数组中没有0,有0不会。。。
}
这是我唯一想到的了
84_avatar_middle
最佳答案
0 
在线会员 发表于 2019-7-23 21:22:52 | 显示全部楼层
回复不上?
84_avatar_middle
最佳答案
0 
在线会员 发表于 2019-7-23 21:24:54 | 显示全部楼层
楼主,只会数组中没0的行不?有0的不会求数组元素个数。。。
29_avatar_middle
最佳答案
0 
在线会员 发表于 2019-7-25 22:26:08 | 显示全部楼层
1.三楼老哥已经给出了解决方案, 就是再增加一个参数(数组的长度)。

2.现在说一下你程序的错误, 数组名a是数组首元素的地址,函数传递数组a的地址, 所以src便是一个指向int数据的指针,指针是一个数据类型,所以sizeof(src)实际上求的是指针占用的字节数,你的系统是4个字节。


这里提一下一个知识点:(数组名与指向数组的指针  的不同之处)
a.数组名是一个常量, 指针是一个变量
b.数组名往往被解释成首元素的地址,但有时候指代整个数组
     sizeof(数组名): 数组名此时被解释为整个数组, 所以得到的是整个数组的大小
     sizeof(指针):此时得到的是指针类型的大小
在主调函数中:可以使用sizeof(a)/sizeof(a[0]),  此时的a并不是被解释成数组首元素的地址,而是指代整个数组。这就是数组名。

3.能否在被调函数中自动求数组的长度?
     通过以上得知,被调函数中使用的是指向数组的指针,所以使用sizeof是得不到数组的大小的,所以是求不出长度的。
     有特殊情况,字符数组是一个很特别的数组,因为他使用结束符'\0'结尾,知道开头和结尾自然能通过循环遍历字符数组。但是传递普通数组时,只知道他的开头,而没有其他手段求长度、结尾,所以需要传递数组长度。
85_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-7-28 11:27:43 | 显示全部楼层
Syc 发表于 2019-7-22 23:04
嗯,这块楼主发现的问题确实存在。看来自己领悟到了
确实没有办法在函数内部获得数组的元素个数,这里可以 ...

嗯嗯!谢谢站长了解了!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

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

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

GMT+8, 2020-10-21 19:01

Powered by CcTry.CoM

© 2009-2020 cctry.com

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