传值传址结构体
Posted 苏迁时
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传值传址结构体相关的知识,希望对你有一定的参考价值。
传值是只传递这个变量的值,传值是传递这个变量的地址。
out传址
public void hanshu1(int a , out int b) { b = a + 10; }
int a = 5; int rr; hanshu.hanshu1(a,out rr); Console.WriteLine(rr);
以上使用out传址 打印出来的值是15
但如果需要函数返回多个值时,可以用减号拼接起来,返回后用split分割开
public string Fanhui(string name , string sex,int age) { age += 10; return name + "-"+sex +"-"+ age; }
string s = hanshu.Fanhui("张三", "男", 33); string[] aa = s.Split(\'-\'); foreach (string q in aa) { Console.WriteLine(q); }
结构体: 结构体:自定义类型 值类型
一组变量的组合
需要定义的位置,class里面,main函数外面,里面包含的变量可以使多种数据类型的
例:学生信息的结构体:学号 姓名 性别 分数
struct student { public int xuehao; public string name; public string sex; public double score; }
student st = new student(); ArrayList al = new ArrayList(); Console.Write("请输入班级人数:"); int a = int.Parse(Console.ReadLine()); for (int i = 0; i < a; i++) { student sst = new student(); Console.Write("请输入第{0}个学生的学号:", i + 1); sst.xuehao = int.Parse(Console.ReadLine()); Console.Write("请输入第{0}个学生的姓名:", i + 1); sst.name = Console.ReadLine(); Console.Write("请输入第{0}个学生的性别:", i + 1); sst.sex = Console.ReadLine(); Console.Write("请输入第{0}个学生的分数:", i + 1); sst.score = double.Parse(Console.ReadLine()); al.Add(sst); } Console.WriteLine("所有人员信息输入完毕,请按回车键开始打印。"); Console.ReadLine(); for (int i = 0; i < al.Count; i++) { student sst = (student)al[i]; Console.WriteLine("第{0}个学生的学号是:{1},姓名是{2},性别是{3},分数是{4}", i + 1, sst.xuehao, sst.name, sst.sex, sst.score); }
另外 结构体可以互相调用:
struct student { public int xuehao; public string name; public string sex; public Score score; } struct Score { public double yufen; public double shufen; public double yingfen; }
练习:超市购物问题
去超市选择要购买的商品
0.开始购买
1.洗发水 15元
2.牙刷 5元
3.可口可乐 3元
4.水杯 12元
5.毛巾 6元
6.结算
输入想要的物品编号,输入每种商品需要买几件
结算:需要列出来商品名称、单价、数量、
总价以及所有物品总价,结账时间
然后输入交给收银员的钱数,
不够,请继续交钱
够,结算,找钱
Console.WriteLine("0.开始购买"); Console.WriteLine("6.结算"); Console.Write("请开始购买:"); int biao = 0; double zong = 0; ArrayList al = new ArrayList(); for (int i = 0; i == 0; ) { string a = Console.ReadLine(); if (a == "0") { for (int k = 0; k == 0; ) { Console.WriteLine("1.洗发水 15元"); Console.WriteLine("2.牙刷 5元"); Console.WriteLine("3.可口可乐 3元"); Console.WriteLine("4.水杯 12元"); Console.WriteLine("5.毛巾 6元"); Console.WriteLine("6.结算"); Console.Write("请输入选项:"); string aa = Console.ReadLine(); Shop sp = new Shop(); switch (aa) { case "1": sp.name = "洗发水"; sp.price = 15; biao++; Console.Write("您选择的是洗发水,请输入需要多少瓶:"); break; case "2": sp.name = "牙刷"; sp.price = 5; biao++; Console.Write("您选择的是牙刷,请输入需要多少支:"); break; case "3": sp.name = "可口可乐"; sp.price = 3; biao++; Console.Write("您选择的是可口可乐,请输入需要多少瓶:"); break; case "4": sp.name = "水杯"; sp.price = 12; biao++; Console.Write("您选择的是水杯,请输入需要多少个:"); break; case "5": sp.name = "毛巾"; sp.price = 6; biao++; Console.Write("您选择的是毛巾,请输入需要多少个:"); break; case "6": if (biao != 0) { Console.Write("总价:{0}元。请输入缴费金额:", zong); double qian = double.Parse(Console.ReadLine()); while (qian < zong) { Console.Write("金额不足,请继续缴费:"); qian += double.Parse(Console.ReadLine()); } Console.WriteLine("缴费完成,找零{0}元,{1},欢迎下次光临。", qian - zong,DateTime.Now); i = 1; k = 1; } else { Console.WriteLine("您并未购买任何商品,退出超市"); i = 1; k = 1; } break; default: Console.Write("输入有误,请重新输入:"); break; } if (aa == "6") { break; } for (; ; ) { try { sp.shuliang = int.Parse(Console.ReadLine()); break; } catch { Console.Write("输入有误,请重新输入数量:"); } } zong += (sp.price * sp.shuliang); al.Add(sp); Console.Write("购买成功,请按回车继续购买:"); Console.ReadLine(); Console.Clear(); for (int j = 0; j < al.Count; j++) { Shop ssp = (Shop)al[j]; Console.WriteLine("您已经选择了{0},单价是:{1},数量:{2},单品总价:{3}", ssp.name, ssp.price, ssp.shuliang, ssp.price * ssp.shuliang); } } } else if (a == "6") { Console.WriteLine("您并未购买任何商品,退出超市"); i = 1; } else { Console.Write("输入有误,请重新输入:"); } }
总结:结构体是个自定义的类 使用前需要初始化、实例化 其使用方法跟其他类区别不大 只是可以包含多种其他类型
以上是关于传值传址结构体的主要内容,如果未能解决你的问题,请参考以下文章