코딩 농장

[C/포인터] C언어 포인터를 사용해보자 본문

전공 공부/알고리즘

[C/포인터] C언어 포인터를 사용해보자

버밍이 2021. 5. 19. 23:41
728x90

C언어는 다시는 쳐다볼 일 없을 줄 알았는데, 전공 알고리즘 시간에 C언어를 이용하게 되었다.

 

예전에 포인터를 이해했었다는 생각 하나로 공부를 안 하고 들어갔더니, 포인터를 사용할 수가 없더라... 그래서 시작한다.

 

이번 목표는 '연결리스트 만들기'이다.

 

1. 포인터 사용법

int main() {
	int a = 1;
	int* b = &a;

	printf("%d %d %d %d %d", a, &a, b, *b, &b);
}

결과)

1 7863224 7863224 1 7863212

포인터는 {자료형} * {변수명}; 이렇게 선언한다.

위의 예시처럼 int* b; 이렇게.

b=&a, *b=&a 값을 주는 방식은 이렇게 둘 다 가능하다.

그리고 b가 a의 주소값을 가지고 있으면, *b는 b가 가진 주소가 가리키는 곳으로 향한다.

이해를 돕기 위한 그림으로 나타내자면 이렇게.

이 정도 개념만 제대로 알고 있어도 반은 한 것이다.

 

2. struct 안에서 포인터 사용

이런 느낌의 연결리스트를 만들기위해, node struct를 만들어보자.

data필드와 link 필드가 필요하고, head와 node를 다르게 둘 것이다.

#include <stdio.h>
#include <stdlib.h>

typedef struct {
	int data;
	struct ListNode* link;
}ListNode;

typedef struct {
	ListNode * head
}ListHead;

void init(ListHead* h) {
	h->head = NULL;
}

int main() {
	ListHead header;
	init(&header);
}

짜잔!

일단 ListHead 구조와 ListNode 구조에서 포인터가 쓰였다.

그리고 init의 parameter가 포인터다!

main에서 선언한 header 구조 안의 head값을 초기화하려고 포인터를 썼다.

지금 저 상황을 그림으로 표현하면

이런 상황쯤 될 것이다.

ListHead 타입 header는 ListNode를 가지고 있는데, 요 놈이 NULL 이니까!

 

다음 포스팅은 이제 본격적으로 ListNode를 써서 연결리스트를 구현해볼 것이다.

'전공 공부 > 알고리즘' 카테고리의 다른 글

[C/포인터] C언어 포인터를 사용해보자 (2)  (0) 2021.05.20
Comments