黑马程序员-学习枚举、结构体和数组的笔记

本文详细介绍了C#中结构体、枚举和数组的基础概念及应用,包括如何定义和使用这些数据类型,以及它们在实际编程中的作用。通过示例代码演示了如何创建和操作结构体、枚举和数组,帮助开发者理解和掌握这些核心知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

经过前几天的学习,现在整理并巩固一下C#中的一些基础知识:结构体、枚举和数组

1、结构体:

语法:

访问修饰符   struct   结构名

  {

       //定义结构成员

  }

(在结构中定义变量时,必须要加public修饰)

在定义好一个结构后,就可以直接声明相应的变量,声明好变量后,通过变量名.成员名  来访问结构的成员。

 

为什么要用结构?

1)比如我们为了存储一个人的信息,要声明一组变量,当我们要存储的n个人的信息时,就要声明n租变量,这样就会很麻烦;

2)存储一个人的信息这几个变量间没有关系,容易记乱。

3)当申明的一组信息时,它们的类型不一样时用struct存储就很方面,示例代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _06struct
{
    enum Gender { 男,女}
    class Program
    {
        public struct Person
        {
            public string name;
            public Gender sex;
            public int age;
        }

        static void Main(string[] args)
        {
            Person firPerson;
            firPerson.name = "张三";
            firPerson.sex = Gender.男;
            firPerson.age = 20;

            Person secPerson;
            secPerson.name = "李四";
            secPerson.sex = Gender.女;
            secPerson.age = 19;

            Console.WriteLine("大家好,我叫{0},我是一位{1}生,我今年{2}岁了!",firPerson.name,firPerson.sex,firPerson.age);
            Console.ReadKey();
        }
    }
}


2、枚举

语法:

enum  自己起的类型名称  {值1,值2,值3……值n};

 

注意:

枚举的定义一般和类定义在同一个级别,这样在同一个命名空间的所有的类就都可以使用这个枚举了。

定义枚举时,值不能为int类型;

枚举类型的变量都可以强制转换为int类型;

枚举的值在定义时是有一个默认的编号的,编号从0开始。

 

枚举的作用:

1)限制用户不能随意赋值,只能在定义枚举的时候列举的值中选择;

2)不需要死记每一个值是什么,只需要选择相应的值。

 

什么时候用枚举?

当我们定义一种枚举类型并且在定义这种类型时我们要指定这个类型的所有值的时候,就要用枚举。

 

如何把一个字符串转换成枚举类型?

(自定义枚举类型)(Enum.Parse(typeof(自定义枚举类型),带转换字符串)),示例如下:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace @enum
{
    enum Gender { 男,女}

    class Program
    {
        static void Main(string[] args)
        {

                Console.WriteLine("请输入您的性别(男/女):");
                Gender sex;
           try
           {
                //用户自己输入的性别
                sex = (Gender)(Enum.Parse(typeof(Gender), Console.ReadLine()));
                Console.WriteLine("您的性别为:{0}", sex);
            }
            catch
            {
                Console.WriteLine("对不起,您输入的信息有误!");
            }
            Console.ReadKey();
        }
    }
}


3、数组

C#中数组是一个很重要的知识点,数组可以帮我们一次声明多个同类型的变量,这些变量在内存中是连续存储的。

 

语法:

数据类型   []  数组名  =  new   数据类型[数组长度]

例如:int [] Score = new int [5];

就声明了一个长度为5的数组,数组叫Score;通俗点说:就是声明了一个数组,里面包含了5个int类型的变量,数组名叫:Score ,里面的5个int类型的变量叫做数组元素。

 

如何访问数组?

通过下标(索引)来访问数组:数组名[编号]

比如,我们要访向第0个元素赋一个3,可以这样写:Score[0] = 3 ;

int类型数组一旦声明,里面的每一个元素都被初始化为0.

通过  数组名.Length  可以获取数组的元素个数(长度)。示例如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 数组
{
    class Program
    {
        //某个班级一共有60人,统计所有人的平均成绩,并且把每个人的成绩也显示出来
        static void Main(string[] args)
        {
            int[] score = new int[60];
            int sum = 0;
            try
            {
                for (int i = 0; i < 60; i++)
                {
                    Console.WriteLine("请输入第{0}个同学的成绩:", i + 1);
                    score[i] = Convert.ToInt32(Console.ReadLine());
                    sum += score[i];
                }

                double average = 1.0 * sum / 60;
                Console.WriteLine("该班级所有学生的平均成绩为:", average);

                for (int i = 0; i < 60; i++)
                {
                    Console.WriteLine("第{0}个学生的成绩为:{1}", i + 1, score[i]);
                }
            }
            catch
            {
                Console.WriteLine("您的成绩输入有误!");
            }
            Console.ReadKey();
        }
    }
}


 

 

 

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------详细请查看:http://net.itheima.com/

### C语言中结构体指针数组结构体数组指针的区别 #### 定义上的区别 在C语言中,**结构体指针数组**是一个指向多个不同结构体实例的指针集合,而**结构体数组指针**则是指向整个结构体数组的一个单一指针。 - **结构体指针数组**:这是一个普通的数组,其中每个元素都是一个指向特定类型的结构体的指针。 示例定义如下: ```c struct Test { char cdata; int idata; }; struct Test obj1 = {'A', 1}; struct Test obj2 = {'B', 2}; struct Test* ptrArray[2]; ptrArray[0] = &obj1; ptrArray[1] = &obj2; ``` - **结构体数组指针**:这是单个指针,它指向的是由连续存储的一系列相同类型结构体组成的数组的第一个元素。 示例定义如下: ```c struct Test arrayObj[2] = { {'X', 10}, {'Y', 20} }; struct Test (*ptrToArray)[2] = &arrayObj; ``` --- #### 访问方式的不同 对于这两种不同的数据形式,在访问其内部成员的方式上也存在差异: - 对于**结构体指针数组**,通过索引来获取对应的指针并间接访问目标对象的内容。 ```c printf("%c %d\n", (*ptrArray[0]).cdata, (*ptrArray[0]).idata); // 输出 A 1 printf("%c %d\n", ptrArray[0]->cdata, ptrArray[0]->idata); // 同样效果,更简洁写法 ``` - 而针对**结构体数组指针**来说,则需先解除对该数组整体地址的引用再进一步操作具体位置的数据项。 ```c printf("%c %d\n", (*(ptrToArray))[0].cdata, (*(ptrToArray))[0].idata); // 输出 X 10 printf("%c %d\n", (*ptrToArray)[1].cdata, (*ptrToArray)[1].idata); // 输出 Y 20 ``` 上述两种方法均实现了对相应字段值的有效读取[^1]。 --- #### 存储布局对比 从内存分配角度来看两者也有显著差别: - 当声明了一个`struct Test* ptrArray[N];`这样的结构体指针数组时,实际上只是预留了一片能够容纳N个指针大小的空间,并未自动初始化这些指针所指向的具体实体;因此还需要手动为其赋初值使其真正关联到有效的结构体实例上去才行。 - 反观像这样定义出来的结构体数组指针:`struct Test(*ptrToArray)[M]=&someStructArray;`,这里已经明确了这个变量实际代表的就是某个已存在的含有M个元素规模之下的结构体数组首址信息而已. --- #### 应用场景分析 基于以上特性描述可以得出它们各自适用场合的大致范围: - 如果程序设计需求涉及到频繁更换或者动态调整各个独立个体间相互关系的话那么采用「结构体指针数组」会更加灵活便捷一些因为只需要简单修改对应下标的指向即可完成重新配置工作无需顾虑底层物理排列顺序等问题. - 假设当前任务重点在于高效处理大批量同质化记录单元并且希望保持原有线性序列不变的情况下选用「结构体数组指针」往往能带来性能优势由于减少了额外层次跳跃动作从而加快存取速度同时简化逻辑控制流程便于维护管理. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值