开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4662|回复: 7
收起左侧

[C#作业] 第三天作业

[复制链接]
发表于 2019-4-1 16:37:32 | 显示全部楼层 |阅读模式   广东省揭阳市
  1. 值类型与引用类型的区别是?

  2. 装箱时如何产生的?

  3. 下题中2个字符串的地址是否相同?

    string str1 = "123456";
    string str2 = "123456";
    unsafe
    {
      fixed (char* p = str1)
      {
          Console.WriteLine($"str1Address:{(int)p}");
    
      }
      fixed (char* p = str2)
      {
             Console.WriteLine($"str2Address:{(int)p}");
    
      }
    } 
  4. 下题中字符串变量的值被改变了吗?

    string str = "123456";
    str+="789";
  5. 下面的题中错误的是(多选)?

    • [ ] decimal d = 1.98;
    • [ ] long lnum = 3147483647; int inum =  Convert.toInt32(a);
    • [ ] 逻辑运算符 & 是短路操作符
    • [ ] int i =10; int b = i++;  b变量的值是11;
    • [ ] C#中关系运算符等值判断使用 "=" 号
发表于 2019-5-25 00:38:52 | 显示全部楼层   湖南省长沙市

值类型与引用类型的区别是?

  • 值类型只需要一段单独的内存,用于储存实际的数据,通常储存在栈内。
  • 引用类型需要两段内存
    • 第一段储存实际的数据,它总是位于堆中。
    • 第二段是一个引用,指向数据在堆中的位置。

装箱是如何产生的?

  • 值类型向引用类型转换的过程称为装箱,值类型储存在栈,转向引用类型时会在堆内储存数据,栈上是它的引用;

    包括值类型在内的所有C#类型都派生自object类型。然而,值类型是高效轻量的类型,因为默认情况下在堆上不包括他们的对象组件。然而,如果需要对象组件,我们可以使用装箱。装箱是一种隐式转换,它接受值类型的值,根据这个值在堆上创建一个完整的引用类型对象并返回对象引用。

下题中2个字符串的地址是否相同?

string str1 = "123456";
string str2 = "123456";
unsafe
{
  fixed (char* p = str1)
  {
      Console.WriteLine($"str1Address:{(int)p}");

  }
  fixed (char* p = str2)
  {
         Console.WriteLine($"str2Address:{(int)p}");

  }
} 
2个字符串的地址相同

下题中字符串变量的值被改变了吗?

string str = "123456";
str+="789";
改变了,不推荐像易语言一样直接把字符串相加,这样字符串池内会创建新的地址,产生浪费,即使进行强转换也不会报错,程序最怕的不是报错,而是有错不报无法debug,推荐使用下面这种方式进行类型转换,如果转换失败会报错。
i.ToString()

下面的题中错误的是(多选)?

1.decimal d = 1.98;
2.long lnum = 3147483647; int inum =  Convert.toInt32(a);
3.逻辑运算符 & 是短路操作符
4.int i =10; int b = i++;  b变量的值是11;
5.C#中关系运算符等值判断使用 "=" 号;

1.错误,decimal,128 位精确的十进制值,28-29 有效位数,该类型需要有M后缀;
2.错误,数值范围过大,long范围大于int;

类型 描述 范围
int 32 位有符号整数类型 -2,147,483,648 到 2,147,483,647
long 64 位有符号整数类型 -923,372,036,854,775,808 到 9,223,372,036,854,775,807

3.错误,变量在前,先赋值后运算,b=10;
4.正确,&&是短路操作符,表达式1 && 表达式2:如果左边的表达式为假,则不再继续求表达式2的值(短路操作提升性能),否则继续求表达式2的值;
5.错误,C#中关系运算符等值判断使用“==”;

评分

参与人数 1好评 +1 精币 +10 收起 理由
老郭 + 1 + 10 非常优秀

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2019-5-11 12:29:35 | 显示全部楼层   山东省枣庄市
本帖最后由 AtomSoft 于 2019-5-11 12:30 编辑

网络BUG,重复提交了两次作业。这条删除了
平时上学时间少,抽空学习。版主教程非常好


回复 支持 反对

使用道具 举报

发表于 2019-5-11 12:28:37 | 显示全部楼层   山东省枣庄市
本帖最后由 AtomSoft 于 2019-5-11 12:33 编辑

1. 值类型与引用类型的区别是?

值类型中存贮数据 引用类型存储内存地址


2. 装箱时如何产生的?

装箱在值类型向引用类型转换时发生

拆箱在引用类型向值类型转换时发生

3. 下题中2个字符串的地址是否相同?

  
string str1 = "123456";
string str2 = "123456";
unsafe
{
fixed (char* p = str1)
{
Console.WriteLine ($"str1Address:{ (int)p}");

}
fixed (char* p = str2)
{
Console.WriteLine ($"str2Address:{ (int)p}");

}
}


一样,因为string变量中存贮的是字面值常量,字符串池里面不重复存贮相同常量。二者指向同一内存地址。



4. 下题中字符串变量的值被改变了吗?

  
string str = "123456";
str+="789";


改变了,但是创建了新的地址,循环拼接效率会低。


5. 下面的题中错误的是(多选)?

   - [ X ] decimal d = 1.98;
   - [ X ] long lnum = 3147483647; int inum =  Convert.toInt32(a);
   - [ X ] 逻辑运算符 & 是短路操作符
   - [ X ] int i =10; int b = i++;  b变量的值是11;
   - [ X ] C#中关系运算符等值判断使用 "=" 号

评分

参与人数 1好评 +1 精币 +10 收起 理由
老郭 + 1 + 10 很赞同,谢谢!

查看全部评分

回复 支持 反对

使用道具 举报

结帖率:79% (11/14)

签到天数: 1 天

发表于 2019-4-25 03:50:11 | 显示全部楼层   湖南省邵阳市
1. 值类型与引用类型的区别是?    值为本身,引用是内存地址

2. 装箱时如何产生的?      object类型

3. 下题中2个字符串的地址是否相同?

   ```csharp
   string str1 = "123456";
   string str2 = "123456";
   unsafe
   {
      fixed (char* p = str1)
      {
          Console.WriteLine($"str1Address:{(int)p}");
   
      }
      fixed (char* p = str2)
      {
             Console.WriteLine($"str2Address:{(int)p}");
   
      }
   }
   ```

地址相同

4. 下题中字符串变量的值被改变了吗?

   ```csharp
   string str = "123456";
   str+="789";
   ```

被改变了

5. 下面的题中错误的是(多选)?

   - [ ] decimal d = 1.98;  要加M
   - [ ] long lnum = 3147483647; int inum =  Convert.toInt32(a);   不行,LONG比INT大
   - [ ] 逻辑运算符 & 是短路操作符   &&
   - [ ] int i =10; int b = i++;  b变量的值是11;     是10
   - [ ] C#中关系运算符等值判断使用 "=" 号     ==

点评

值类型到引用类型的转换 是装箱操作   广东省揭阳市  发表于 2019-4-25 16:05

评分

参与人数 1好评 +1 精币 +2 收起 理由
老郭 + 1 + 2 很赞同,谢谢!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2019-4-2 09:24:03 | 显示全部楼层   河南省郑州市

1。值类型存储的是值本身,引用类型存储的是值得引用(地址)。

2。值类型到object类型的转换,这样的话就可以值变成没有指定类型的。

3。相同。

4。改变了,输出123456789。

5。以上全部;[缺少m] [太大太小][&&][10][==]

点评

解释的特别好, 值类型到引用类型的转换就是装箱   广东省揭阳市  发表于 2019-4-2 11:45

评分

参与人数 1精币 +2 收起 理由
老郭 + 2 很赞同,谢谢!

查看全部评分

回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
发表于 2019-4-1 18:48:33 | 显示全部楼层   重庆市重庆市
大佬都开始学这么高级的玩意了吗
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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