본문 바로가기
컴퓨터/C#

[C#] 구조체와 배열

by 아기상어  2020. 5. 27.

구조체

struct 구조체명{

타입명 변수명;

타입명 변수명;

...

}

 

여러가지 타입의 자료형을 하나로 묶어 놓은것. 주로 상태 정보를 모아놓을때 쓰인다 ex)학생(학번, 생년월일, 이름)

구조체에 행위정보(메소드) 까지 넣을수 있게 한것이 class 이다.

 

 

 

예제) 학생 구조체 만들어서 값입력 후 출력해보기

 

C#에서 출력할 때 {0}을 {0:X}로 바꾸면 16진수로 변환되서 출력된다.

 

        /*
        학생 데이터

        이름 - string
        생년 - int
        학번 - int
       
        학생이 500명이면 변수선언 귀찮 -> 구조체 씀
        */
        struct Student
        {
            public string Name;
            public int Birth;
            public int Num;
        }


        static void Main(string[] args)
        {

            Student st1 = new Student();
            st1.Name = "홍길동";
            st1.Birth = 19990107;
            st1.Num = 14723331;

            Console.WriteLine("이름 : {0}", st1.Name);
            Console.WriteLine("생년 : {0}", st1.Birth);
            Console.WriteLine("학번 : {0:X}", st1.Num);   //  16진수로 바꾸기

        }

 

 


배열

타입[  ] 변수명 = { 배열값 };

같은 자료형을 하나의 이름으로 묶는것. 2차원 배열 일 경우 [ , ]로 표현한다.

 

 

 

예제1) iMoney[20] 배열에 1000부터 4씩 증가하는 값을 입력받고 foreach 문으로 출력하기

 

foreach 란 for(타입 변수명 in 배열) { 실행코드 } 형태로 쓰며 
배열[0]부터 [19] 까지의 값을 차례대로 foreach를 반복할때마다 변수에 복사시킨다.

            int[] iMoney = new int[20];   //  Money 배열 선언,[] 인덱스 방식
                                          // 처음값이 First, 마지막 값이 last found
            int iCount;

            for(iCount = 0; iCount < 20; iCount++)
            {
                iMoney[iCount] = 1000 + (4 * iCount);
            }

            foreach(int iNum in iMoney)
            {
                Console.WriteLine("{0} ",iNum);  //  foreach에서 돌다가 사라짐.
            }

 

 

 

 

예제2) 1차원,2차원 배열에 GetLength() 함수 써보기

 

1차원 배열일때 1차원배열.GetLength(0); 사용 시 열의 수가 반환되고
2차원 배열일때 2차원배열.GetLength(0); 사용 시 행의 수가 반환된다. GetLength(1);은 열의 수 반환

 

            int[] iMoney = new int[20];
            Console.WriteLine("1차원 배열 열의 수 : "+iMoney.GetLength(0));  //  1차원 배열일때는 0일때 열의 수 반환.

            int[,] i2Array = { { 1000, 1004, 1008 },
                               { 1012, 1016, 1020 } };    //  한꺼번에 다집어 넣을수 있음.
            Console.WriteLine("2차원 배열 행의 수 : " + i2Array.GetLength(0));     //   2차원 배열일때는 0일떄 행의 수
            Console.WriteLine("2차원 배열 열의 수 : " + i2Array.GetLength(1));    //   1일떄 열의 수 를 반환

 

 

 

예제3) 2차원 배열 표 형식으로 출력 (for, foreach 사용)

 

            int iCount;
            int[,] i2Array = { { 1000, 1004, 1008 },
                               { 1012, 1016, 1020 } };

            //표 모양으로 2차원 배열 값 출력(for) 
            //===============================================
            for (iCount = 0; iCount < i2Array.GetLength(0); iCount++)
            {
                for(int iCount2 = 0; iCount2 < i2Array.GetLength(1); iCount2++)
                {
                    Console.Write(i2Array[iCount,iCount2]+" ");    //   1일떄 열의 수 를 반환
                }
                Console.WriteLine();
            }
            iCount = 0;
            Console.WriteLine();

            //표 모양으로 2차원 배열 값 출력(foreach)
            //===============================================
            foreach (int iNum in i2Array)
            {
                Console.Write(iNum+" ");
                iCount++;
                if(iCount%i2Array.GetLength(1) == 0)     Console.WriteLine();
            }

 

 

예제4) 배열 함수들을 사용하기

 

함수를 쓰고 f1을 누르면 설명창으로 연결된다.

BinarySearch는 먼저 배열이 정렬되어 있지 않다면 정확한 값을 반환하지 않는다.

배열 함수들을 이용해 보기

 

 Console.WriteLine("=============================");
            int[,] iArray = { { 1, 2, 3 }, { 4, 5, 6 } };
            Console.WriteLine("GetLength(0) " + iArray.GetLength(0));
            Console.WriteLine("GetLength(1) " + iArray.GetLength(1));
            Console.WriteLine("GetUpperBound(0) " + iArray.GetUpperBound(0));
            Console.WriteLine("GetUpperBound(1) " + iArray.GetUpperBound(1));
            Console.WriteLine("Length " + iArray.Length);
            Console.WriteLine("=============================");

            Console.WriteLine("Reverse Test : 1, 2, 3, 4, 5, 6 뒤집기");
            int[] i1Array = { 1, 2, 3, 4, 5, 6 };
            Array.Reverse(i1Array);
            foreach (int iTemp in i1Array)
            {
                Console.Write(iTemp + " ");
            }
            Console.WriteLine("\n=============================");

            Console.WriteLine("Sort Test : 7, 200, 2, 65, 84, 11 정열");
            int[] i2Array = { 7, 200, 2, 65, 84, 11 };
            Array.Sort(i2Array);
            foreach (int iTemp in i2Array)
            {
                Console.Write(iTemp + " ");
            }
            Console.WriteLine("\n=============================");

            Console.WriteLine("BinarySearch Test : 11의 위치(인덱스 번호) 검색");
            int iResult = Array.BinarySearch(i2Array, 11);
            Console.WriteLine("BinarySearch " + iResult);
            Console.WriteLine("=============================");

            Console.WriteLine("Clear Test : 6, 5, 4, 3, 2, 1에서 [3]부터 2개 삭제");
            Array.Clear(i1Array, 3, 2);
            foreach (int iTemp in i1Array)
            {
                Console.Write(iTemp + " ");
            }
            Console.WriteLine("\n=============================");

'컴퓨터 > C#' 카테고리의 다른 글

[C#] 메모장에 소스적어 컴파일 하기  (0) 2020.05.29
[C#] 클래스  (0) 2020.05.28
[C#] 닷넷  (0) 2020.05.27
[C#] 소수 검사하기  (0) 2020.05.26
[C#] 메소드  (0) 2020.05.26