VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 743|回复: 10

[已解决]麻烦问下各位大佬,基础课程的21课的课后作业有个问题搞不懂QAQ。

[复制链接]
20_avatar_middle
最佳答案
0 
在线会员 发表于 2020-1-15 22:01:34 | 显示全部楼层 |阅读模式
本帖最后由 李覃鹏 于 2020-1-16 11:39 编辑

是这样的,初学c++,看完21课后顺手做下课后作业,但蛋疼的是,照着思路做的解法没有问题,能正常的遍历完字符串中的字符。
如图片“原来的思路.png”

于是乎想将写死的方法内数组长度改为利用sizeof获得,即不论输入的字符串长度如何都可正确遍历字符。
如图片“更改数组长度后.png”

但却无法正确的遍历字符串数组中的字符,一顿操作后发现了问题所在。
如图片“问题所在.png”


就是想问下,sizeof为何同一个字符串的长度被传入方法后减少了两个。  求大佬们解答下。顺便上传代码压缩包。


麻烦问下第二个问题。就是传入方法内的数组,如何获取正确的数组长度呢?22课的课后作业也遇到了无法获取正确数组长度的问题,求各位大佬给个解答方法。就是下文代码中  dix<9的这个位置 无法获取数组长度 只能写死了。


麻烦问下各位大佬,基础课程的21课的课后作业有个问题搞不懂QAQ。
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;

  4. int get_min_max(int src[], int* min_v, int* max_v) {
  5.         for (int idx = 0; idx <9; idx++) {
  6.                 *max_v = src[idx] > *max_v ? src[idx] : *max_v;
  7.                 *min_v = src[idx] > * min_v ? *min_v : src[idx];
  8.         }
  9.         return 0;
  10. }

  11. int main() {
  12.         int a[9] = { 1,-2,3,4,7,4,8,9,3};
  13.         int min = a[0];
  14.         int max = a[0];
  15.         get_min_max(a, &min, &max);
  16.         cout << "最小值为: " << min << endl;
  17.         cout << "最大值为: " << max << endl;
  18.         return 0;
  19. }
复制代码




原来的思路

原来的思路











最佳答案
12_avatar_small
2020-1-16 08:41:56
原因是数组当作函数参数时会退化成指针 所以是4个字节 你可以用strlen试试

问题所在

问题所在

更改数组长度后

更改数组长度后

Desktop.zip

1.31 KB, 下载次数: 2





上一篇:有个大问题,请求大佬帮忙,关于电脑内存的(不是硬盘)
下一篇:求零基础学C++的21课的小作业思路
20_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-15 22:03:09 | 显示全部楼层
默默的打了个饱嗝,顺便为今晚吃了很多却日常写bug而懊恼觉得还不如继续吃点。
75_avatar_middle
最佳答案
23 
online_supermod 发表于 2020-1-15 22:25:52 | 显示全部楼层
能不能把源码上传一下!看看 对比一下
75_avatar_middle
最佳答案
23 
online_supermod 发表于 2020-1-15 23:25:03 | 显示全部楼层
本帖最后由 wl1383838438 于 2020-1-15 23:27 编辑

你那个sizeof a+sizaof b不是 hello +world 的长度,  而是2个变量的所占字节相加。如果我没有猜错的话,看了源码然后看了你改的,恕我才疏学浅,我搞不太明白!打扰了老哥    在下告辞
12_avatar_middle
最佳答案
1 
在线会员 发表于 2020-1-16 08:41:56 | 显示全部楼层    本楼为最佳答案   
bestAnswer
原因是数组当作函数参数时会退化成指针 所以是4个字节 你可以用strlen试试
20_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-16 10:12:15 | 显示全部楼层
本帖最后由 李覃鹏 于 2020-1-16 10:15 编辑
听落雨 发表于 2020-1-16 08:41
原因是数组当作函数参数时会退化成指针 所以是4个字节 你可以用strlen试试


21课的课后作业就是不使用#include<string>这个头文件里面包含的方法,做一个可以连接字符串的函数。所以没法使用strlen,但你说的数组作为函数参数时会退化成指针是正确的,因为数组的长度我不管怎么改,方法内的长度都是8,感谢~

那老哥有啥其他的方法可以获得字符串长度吗?
20_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-16 10:13:39 | 显示全部楼层
wl1383838438 发表于 2020-1-15 23:25
你那个sizeof a+sizaof b不是 hello +world 的长度,  而是2个变量的所占字节相加。如果我没有猜错的话,看 ...

别呀老弟 难得来一次  不玩玩再走吗?麻烦问下各位大佬,基础课程的21课的课后作业有个问题搞不懂QAQ。
20_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-16 11:42:02 | 显示全部楼层
看到23课 数组与指针  有种不祥的预感
75_avatar_middle
最佳答案
23 
online_supermod 发表于 2020-1-16 15:55:56 | 显示全部楼层
李覃鹏 发表于 2020-1-16 11:42
看到23课 数组与指针  有种不祥的预感

指针,  数组  类,继承,一定要好好看,多看几遍都太少了 因为在后期你编程中会大量用上
12_avatar_middle
最佳答案
1 
在线会员 发表于 2020-1-16 16:01:16 | 显示全部楼层
不用strlen就用指针往后自己读取呗 计数然后找到结束符
20_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-16 20:47:37 | 显示全部楼层
听落雨 发表于 2020-1-16 16:01
不用strlen就用指针往后自己读取呗 计数然后找到结束符

就是能给个例子吗?不知道怎么用指针计数。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

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

关闭

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

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

GMT+8, 2023-12-8 18:49

Powered by CcTry.CoM

© 2009-2021 cctry.com

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