VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 127|回复: 7

[求助] 实用C++课后习题疑惑

[复制链接]
32_avatar_middle
在线会员 发表于 2019-10-9 20:39:28 | 显示全部楼层 |阅读模式
str[]里面有10个字母,但是cout<<sizeof(str)<<endl;输出为4
  1. #include <iostream>
  2. using namespace std;
  3. #include <string>
  4. #include "student.h"

  5. void string_upper_diy(char str[],bool b_odd_pos = true);
  6. void string_upper_diy(char str[],bool b_odd_pos)
  7. {
  8.         [color=Red]cout << str << endl;
  9.         cout << sizeof(str) << endl;
  10.         cout << sizeof(char) << endl;[/color]
  11.         cout << sizeof(str) / sizeof(char) << endl;
  12.         int str_len = strlen(str);
  13.         /*cout << str_len << endl;*/
  14.         if (b_odd_pos&&(str_len%2==0))
  15.         {
  16.                 for (int idx = 0; idx < str_len; idx += 2)
  17.                 {
  18.                         if (str[idx] >= 'a')
  19.                         {
  20.                                 str[idx] = str[idx] - ('a' - 'A');
  21.                         }
  22.                         if (str[idx+1]<'a')
  23.                         {
  24.                                 str[idx+1] = str[idx+1] + ('a' - 'A');
  25.                         }
  26.                 }
  27.         }
  28.         else if (b_odd_pos && (str_len % 2 == 1))
  29.         {
  30.                 for (int idx = 0; idx < str_len; idx += 2)
  31.                 {
  32.                         if (str[idx] >= 'a')
  33.                         {
  34.                                 str[idx] = str[idx] - ('a' - 'A');
  35.                         }
  36.                 }
  37.                 for (int idx = 1; idx < str_len; idx += 2)
  38.                 {
  39.                         str[idx] = str[idx] + ('a' - 'A');
  40.                 }
  41.         }
  42.         else if ((!b_odd_pos) && (str_len % 2 == 0))
  43.         {
  44.                 for (int idx = 0; idx < str_len; idx += 2)
  45.                 {
  46.                         if (str[idx+1] >= 'a')
  47.                         {
  48.                                 str[idx+1] = str[idx+1] - ('a' - 'A');
  49.                         }
  50.                         if (str[idx] < 'a')
  51.                         {
  52.                                 str[idx] = str[idx] + ('a' - 'A');
  53.                         }
  54.                 }
  55.         }
  56.         else if ((!b_odd_pos) && (str_len % 2 == 1))
  57.         {
  58.                 for (int idx = 0; idx < str_len; idx += 2)
  59.                 {
  60.                         if (str[idx] < 'a')
  61.                         {
  62.                                 str[idx] = str[idx] + ('a' - 'A');
  63.                         }
  64.                 }
  65.                 for (int idx = 1; idx < str_len; idx += 2)
  66.                 {
  67.                         str[idx] = str[idx] - ('a' - 'A');
  68.                 }
  69.         }

  70. }
  71. int main(int argc, char* argv[])
  72. {
  73.         char shi[] = "asdJYDcdrR";
  74.         string_upper_diy(shi,0);
  75.         cout << shi << endl;
  76.         return 0;
  77. }
复制代码




上一篇:不知道返回值怎么弄
下一篇:36课的小作业,按照答案做了还是崩溃,求解答
50_avatar_middle
在线会员 发表于 2019-10-9 21:06:29 | 显示全部楼层
aaa@ 发表于 2019-10-9 21:00
为什么这个输出就是11呢?
shi[]中shi也相当于地址啊。

因为 一个 是 char shi[11]="......",这个是字符数组, 而另外一个是 函数参数 char[] ,这个数组引用,是个地址。前面一个是一个由编译器自动扩充的字符数组。语法而已,不用奇怪。

评分

参与人数 1驿站币 +1 热心值 +1 收起 理由
82_avatar_small love_cctry + 1 + 1 赞一个!

查看全部评分

50_avatar_middle
在线会员 发表于 2019-10-9 20:51:02 | 显示全部楼层
char[] 不是一个数组,确切的说那是 数组的引用,等效于一个指针,在32位程序中,指针是一个地址,即一个32位的变量,尺寸即4个字节
32_avatar_middle
ico_lz  楼主| 发表于 2019-10-9 21:00:29 | 显示全部楼层
丧德·彪夫斯基 发表于 2019-10-9 20:51
char[] 不是一个数组,确切的说那是 数组的引用,等效于一个指针,在32位程序中,指针是一个地址,即一个32 ...

为什么这个输出就是11呢?
shi[]中shi也相当于地址啊。
  1. int main(int argc, char* argv[])
  2. {
  3.         char shi[] = "asdJYDcdrR";
  4.         cout << sizeof(shi) << endl;
  5.         return 0;
  6. }
复制代码
82_avatar_middle
在线会员 发表于 2019-10-9 22:05:50 | 显示全部楼层
丧德·彪夫斯基 发表于 2019-10-9 21:06
因为 一个 是 char shi[11]="......",这个是字符数组, 而另外一个是 函数参数 char[] ,这个数组引用,是 ...

赞同!顶一个。。。
08_avatar_middle
在线会员 发表于 2019-10-9 22:33:43 | 显示全部楼层
@敏敏 你敢不来?
32_avatar_middle
ico_lz  楼主| 发表于 2019-10-9 22:38:00 | 显示全部楼层
aaa@ 发表于 2019-10-9 21:00
为什么这个输出就是11呢?
shi[]中shi也相当于地址啊。

受教了,多谢!
58_avatar_middle
online_vip 发表于 2019-10-9 23:08:50 | 显示全部楼层
SummerGull 发表于 2019-10-9 22:33
@敏敏 你敢不来?

一个是数组的长度,一个是指针的长度。sizeof字符数组长度可以利于默认添加的\0,可判断接收数组的指针长度,指针占4个字节。

评分

参与人数 1驿站币 +1 热心值 +1 收起 理由
08_avatar_small SummerGull + 1 + 1 阅 ~及格

查看全部评分

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

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

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

GMT+8, 2019-10-19 18:57

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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