Software Engineering Blog

컴퓨터공학부 3학년 재학 중인 학생입니다. 백엔드를 주로 공부하며 금융 분야에 관심이 많습니다.

C언어/기초

<C언어 기초> 배열, 구조체, 그리고 포인터란?

준형 교수 2021. 1. 12. 02:39

안녕하세요.

 

c언어로 자료구조! 알고리즘문제를 풀려면 배열, 구조체, 포인터가 되게 중요하다고 저는 생각합니다. 물론 이 세가지를 자신의 것으로 만들기 위해서 많이 보고, 쓰는 것도 중요하지만 이 개념을 확실히 머리에 각인 시켜야 됩니다. 이 글은 책 c언어로 쉽게 풀어쓴 자료구조를 참고했습니다.

개인적으로 따로따로 쓰면 쉽지만 이 세가지를 혼합해서 쓰는게 어려운거 같습니다 ㅠㅠ

1.배열

영어로 array라고 하는 배열은 거의 모든 프로그래밍 언어에서 제공되는 자료형입니다. 배열은 동일한 타입의 데이터를 한 번에 여려 개 만들 때 사용됩니다.

int a, b, c, d, e; //배열 미사용으로 5개의 변수를 만들었다 int a[5]; //배열 사용

연속적인 메모리 공간이 할당되고 인덱스 번호로 쉽게 접근이 가능하기 때문에 반복문으로 여러가지를 할수있겠습니다. 배열을 그림으로 그리면 아래와 같이 될 것입니다.

인덱스는 0부터 시작한다는 것을 기억해야합니다!

int array[5]; array[0] //기본주소 array[1] //기본주소 + 1*sizeof(int) array[2] //기본주소 + 2*sizeof(int) array[3] //기본주소 + 3*sizeof(int) array[4] //기본주소 + 4*sizeof(int)

위 코드의 주석은 메모리 주소를 표시합니다.

배열에서 또 배열을 추가하여 2차원배열을 선언할수있습니다. 3차원배열도 있지만 사용빈도는 적습니다.

int array[3][4]

행과 열을 뜻하는 [3][4]는 그림으로 나타내면 마치 엑셀표를 연상시킵니다.

빈칸은 귀찮아서 안썼는데 뭐가 들어가는지는 안봐도 뻔하죠. 가로가 row 세로가 col 라고 생각하면 편합니다.

2.구조체

배열이 같은 자료형으로 데이터를 모았다면 구조체는 서로 다른 자료형을 묶어 표현합니다. struct 키워드 사용.

형식.

struct 이름{ 항목1; 항목2; ... };

구조체를 만들었다면 그 구조체 자체가 자료형이 된다고 생각하면 됩니다.

struct 구조체이름 변수이름

마치 변수를 선언하듯 구조체변수를 선언합니다.

구조체 안에 있는 멤버를 사용할려면? '.' 연산자를 사용 멤버 연산자라고 한다.

struct student { int age; char name[]; }; struct student person; person.age = 20; person.name = "gildong" // . 점을 사용해서 접근 struct student person2 = {18,"adam"}; //이렇게 차례대로 초기화 가능

3.포인터

그 유명한 c언어의 포인터. 포인터는 다른 변수의 주소를 가지고 있는 변수. 여기서 알아야할건 모든 변수는 메모리 공간에 저장되고 메모리의 각 바이트에는 '주소'가 있다. 그 주소를 가르키는게 바로 포인터입니다!

& 연산자: & 는 주소를 지칭하는 연산자

* 연산자: *는 간접참조 혹은 역참조 //그 주소의 값을 지칭

포인터를 이용해 두변수의 값을 바꾸는 함수를 만든다.

void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; }

간단한 개념들을 정리하였고 더 자세히 알고 싶다면 인터넷이나 책을 통해 연습하면 될거같습니다. 특히 희소배열 표현방법들이나 배열과 포인터의 관계를 검색해서 연습한 결과 포인터, 배열, 구조체에 대해 더 많이 알게 되었습니다.

 

도움이 많이 되셨나요?