'포인터'에 해당되는 글 4건

  1. 2012.05.16 C <16>. 구조체 (2)
  2. 2012.05.11 C <14>. 배열 (4)
  3. 2012.03.27 C <11>. 포인터 (2)간단실습
  4. 2012.03.23 C <10>. 포인터 (1)개념잡기 (3)

C <16>. 구조체

C 2012.05.16 12:30

오늘의 주제

1. 구조체 


열 여섯 번째 시간입니다.^^

지난 번에는 전처리자에 대해 알아보았습니다.
잘만 사용하면 좋지만, 잘못 사용한다면 독이 될 수 있는 녀석입니다.
사용에 유의하세요^^

오늘은 또 하나의 개념 구조체에 대해 알아보도록 하겠습니다.

자 그럼 이제 시작해 볼까요?^^
스따뚜~~~~~~~~~~~~

그 전에 추천 한 방 부탁~~~~~~~해요~~~~~~
저에게 큰 힘이 됩니다. ^~^




# 구조체의 개념


간단 합니다.
이 녀석은 배열과는 다르게 서로 다른 종류의 자료들이 들어갈 수 있습니다.

큰~~~~~~~ 박스 안에 서로 다른 크기의 작은 박스들이 들어가 있는 형태라고 보시면 되겠습니다.

그래서 우리가 큰 박스를 만들고 그 안에 작은 박스들을 만들어 넣습니다.

선언하는 방법은

struct 구조체이름 {
  내용물(변수들 선언)
} 구조체변수이름;


한 번 구조체 이름으로 선언 해 주면
다음 번에는 
struct 구조체이름 구조체변수이름;
이라고 선언 해 줄 수도 있습니다.

구조체 안의 변수에 접근하는 방법은

구조체변수명.내용물변수이름

이런식으로 접근하게 됩니다.

말로 하니까 어렵네요 ㅎ 예제를 한 번 봅시다요~

# 구조체 예제
 


yagom이라는 이름의 구조체를 tYagom, tAgainYagom 이라고 선언해 준 형태입니다.
yagom이라는 이름의 구조체 안에는 int형 변수 nNum과 char 포인터형 변수 szName이 들어가 있네요~
그곳에 접근하는 방법은 .  을 통해서 접근하는 것이죠.


결과 캡쳐입니다. 다들 예상대로 출력이 되었나요?ㅎ

그런데 구조체를 선언 할 때 마다 struct yagom 이렇게 하기가 좀 귀찬습니다...ㅎㅎ

그래서 조금이라도 더 간단히 하기 위해서 우리는 이렇게도 선언을 할 수 있습니다.

typedef 라는 녀석을 이용하는데요.

typedef는 어떠한 형태의 타입을 나는 이렇게 정의 하겠다, 라고 말해주는 것으로써 #define이랑 하는 짓은 비슷합니다만, 정의 해 줄 녀석이 아무거나가 아니라 자료형이라는 점이 다릅니다.

typedef int my;
이런 식으로 해주면
int a; 라고 선언 한 것과 my a; 라고 선언 한 것과 동일한 효과를 가져오게 됩니다.

그러므로 typedef struct yagom{ ...} yagom; 이런 식으로 선언을 해준다면 struct yagom{...} 과 yagom과 같아지는 효과를 보게 되겠지요.

말로는 잘 이해가 다가오지 않죠?ㅎ 실습 해 봅시다.


위에 그림처럼 struct yagom을 한 것과 그냥 yagom이라고 한 것과 같은 효과를 볼 수가 있네요~


자, 이렇게 해서 구조체에 대해 간단히 알아보았습니다.

참, 오늘 빼먹은 것이 있는데, 만약 구조체의 포인터변수에서 내부의 변수에 접근을 하려면 . 을 사용하는 것이 아니라 ->을 사용하게 됩니다.

잘 이해가 안가시면 다다음 번 포스팅 때 제대로 볼 수 있으실 거예요~ㅎ

그럼 다음에 또 뵈어요~^^&

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



저작자 표시 비영리 변경 금지
신고

'C' 카테고리의 다른 글

C <18>. 연결리스트 (Linked list) - 자료구조(1)  (0) 2012.05.21
C <17>. 동적할당  (2) 2012.05.18
C <16>. 구조체  (2) 2012.05.16
C <15>. 전처리자  (0) 2012.05.14
C <14>. 배열  (4) 2012.05.11
C <13>. 변수의 범위  (0) 2012.04.05
Posted by yagom

C <14>. 배열

C 2012.05.11 12:30

오늘의 주제

1. 배열 


열 네번째 시간입니다.^^

지난 번에는 변수의 범위에 대하여 알아보았습니다.
감이 조금 오실지는 잘 모르겠습니다^^;
혹여나 부족한 부분이 있다면 말씀해 주세요 ㅎ
이번에는 또 하나 중요한 개념인 배열에 대하여 알아보도록 하겠습니다.

출발!!!!

자, 시작전에 추천 한 방 어떠세요?ㅎ



# 배열이란?

자, 배열이란 무엇일까요?

配列
 
나눌 배, 벌일 열.

사전에는
"동일한 성격의 데이터를 관리하기 쉽도록 하나로 묶는 ."
이라고 정의되어 있네요 ㅎ

자, 쉽게 한 번 알아봅시다.



위에는 제가 발로그린 배열의 개념도 입니다.

위의 정의에서 보듯이 배열은 같은 종류의 데이터를 줄세워 놓은 녀석을 말합니다.

그림에서 보듯이 배열은 같은 크기의 상자들이 쭈욱 붙어서 늘어서 있습니다. 
 
배열의 선언방법은

자료형 배열이름[배열크기];

입니다.

초기화 방법은 여러가지가 있습니다만 

5개의 배열에 하나씩 넣어주려면 위의 그림처럼 초기화 해 줄 수 있구요,

int arr[100] = { 0, };

으로 초기화하면 모든 원소의 값이 0으로 초기화 됩니다.

배열의 index는 0부터 시작합니다.

위의 그림에도 보듯이 5칸 배열을 선언을 해 주었는데

index는 0부터 시작을 하므로 index값이 0으로 시작하여 4로 끝나게 되지요.

위의 그림에서 

rgIntArray[0]에는 1이, rgIntArray[1]에는 3이... 이런식으로 들어가 있을 겁니다.

그래서 맨 첫칸의 자료를 변경하거나 읽어오려면 rgIntArray[0] 라고 하면 변수처럼 사용이 가능한 것입니다.

개념이 조금 잡히시나요?

배열은 단지 같은 유형의 데이터를 쭈욱 늘어놓은 것이라고 생각하시면 되겠습니다.^^


# 배열과 포인터
 

여기서 배열의 비밀을 하나 말씀드리려 합니다.

배열을 사용하게되면 같은 유형의 자료들을 모아놓고 쓸 수 있는 편한점이 있지만 이 외에도 좋은 점이 있습니다.

배열 자체를 포인터로 접근이 가능하다는 점입니다.

포인터에 대해서 잘 모르시겠다구요?

지난 포스팅을 참고해 주세요...^^

2012/03/23 - [C] - C <10>. 포인터 (1)개념잡기
2012/03/27 - [C] - C <11>. 포인터 (2)간단실습

'배열을 포인터로 사용이 가능하다고???'

무슨 말일까요?



자. 배열에서 각각의 자료를 불러오거나 저장할 때

배열명[index]로 변수처럼 사용한다고 말씀드렸죠?

그런데 만약에 함수(2012/04/02 - [C] - C <12>. 함수)를 사용할 때, 인자로 배열을 넘겨야 할 때...

이녀석들을 하나하나 다 넘길 수가 없겠죠?

그래서 인자를 넘길때는 해당 자료형의 포인터값으로 넘어가게 됩니다.

그래서 함수 안에서 이 배열 통채를 사용 할 수 있게 됩니다.

배열의 원소들은 메모리 안에서 위에 그림처럼 다닥다닥 붙어있게 됩니다.

그렇기 때문에 배열의 첫머리의 주소만 알면 그 다음녀석, 그 다다음 녀석도 메모리상의 어느 위치에 있는지 쉽게 알 수 있게되는거죠.

이해가 되시려나요? +_+

그래서 그림처럼 rgIntArray 라고 변수처럼 사용하면 이녀석은 배열의 첫 번째 원소를 가리키는 포인터값입니다.

그녀석에 +1을 해주면 그 다음칸 녀석의 주소를 가리키게 되는 것입니다. 그런식으로 rgIntArray+2면 rgIntArray의 주소값이 겠죠?

이해가 안되면 실습으로 궁금증을 풀어봅시다..ㅎㅎ

# 실습해보기 

자세한 코드 설명은 주석에 달려있으므로 참고하시기 바랍니다~!
yagom.h 파일에는

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

만 작성되어 있습니다.



자, 실행 결과입니다.
자신의 실행결과와 일치하나요?ㅎ


여기까지 배열에 관하여 간단히 알아보았습니다.

문자 배열 ( char[] )는 문자열로 사용이 가능합니다.

printf와 같은 함수에서 %s로 문자열 출력이 가능하지요.

대신 문자열의 맨 마지막은 null (\0)으로 끝나야 합니다.

2차원, 다차원 배열도 있지만 그것도 어렵게 생각하실 필요가 없습니다.

쉽게 쉽게 생각해 보세요~

따로 포스팅할 필요를 잘 못느껴서 하진 않지만,

누군가 요청해 주시면 다차원 배열에 대해서도 한 번 알아보도록 하겠습니다~^^&


자, 그럼 여기서 생길만한 의문점..!!

Q : 배열을 생성해 놓고 배열의 크기나 종류를 변경 할 수는 없나요?
A : 네, 불가능 합니다. 그렇기 때문에 동적할당이라는 녀석을 사용하게 되는데, 추후에 포스팅 할 예정입니다.

다른 의문점이 또 있다면 댓글 주세요..^^

또 필요한 것이 있다면 말씀해 주세요 ㅎ

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



저작자 표시 비영리 변경 금지
신고

'C' 카테고리의 다른 글

C <16>. 구조체  (2) 2012.05.16
C <15>. 전처리자  (0) 2012.05.14
C <14>. 배열  (4) 2012.05.11
C <13>. 변수의 범위  (0) 2012.04.05
C <12>. 함수  (4) 2012.04.02
C <11>. 포인터 (2)간단실습  (0) 2012.03.27
Posted by yagom

오늘의 주제

1. 포인터 실습 


열 한번째 시간입니다.^^

지난 번에는 포인터의 개념에 대해 간략히 살펴봤어요~
포인터라는 녀석을 알아도 헷갈릴때도 있고, 이해가 안될 수도 있지만, 꼭 잘 이해하고 계셔야 해요 ㅎㅎ
만날 똑같은 소리지만... 잘 이해하고 계셔야 나중에 좋습니다.
기초가 중요하니까요^^

자 그럼 오늘은 간단히 코드로 실습해 보도록 합니다~
스따뚜~~~~~~~~~~~~


# 포인터 실습

자, 지난번에 빼뜨렸고, 요번에도 빠뜨린 내용이 있는데 포인터는 선언해 줄때 그녀석이 어떠한 형식의 변수의 주소를 가지게 될지 앞에 표현해 주는 것입니다.

int *ptrSomebody = &somebody;

이런식으로 표현이 되어있으면 somebody는 int형 변수이여야 한다는 뜻이지요.

물론 void 포인터라는 특이한 개념도 있지만, 일단 이렇게 알아두세요 ㅎ

자 그럼 간단한 코드로 실습해 보겠습니다~

간단하게 새로운 프로젝트를 만들어 주시구요~


프로젝트명은 Pointer로 해 줍니다.


굳이 하드에 공간낭비 할 필요없이 Source Control은 꺼 주셔도 됩니다.
뭔지 알고 계시는 분들은 쓰셔도 상관없구요 ㅎㅎ


자..! 그러면 이렇코롬 코드를 넣어주고 실행!!!


뭐...별다른 설명은 필요 없을 거 같네요 ㅎㅎㅎ

결과 디버그창 보시면 이해 되실거예요.

지난번에 썼던 개념들( 2012/03/23 - [C] - C <10>. 포인터 (1)개념잡기 )과 함께 비교해 보면 좋겠어요~

참..! 그리고 예제에는 int값과 int포인터만 선언해서 해봤는데

여러분들은 double, float, char 등등 많이많이 해보세요~

절대 제가 귀찮아서 그런건 아녜요^^

그럼 뿅!!


by yagom

twitter :@yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

저작자 표시 비영리 변경 금지
신고

'C' 카테고리의 다른 글

C <13>. 변수의 범위  (0) 2012.04.05
C <12>. 함수  (4) 2012.04.02
C <11>. 포인터 (2)간단실습  (0) 2012.03.27
C <10>. 포인터 (1)개념잡기  (3) 2012.03.23
C <9>. 반복문(2) do-while  (7) 2012.02.06
C <8>. 조건문(3) 3항 연산자  (7) 2012.01.28
Posted by yagom

오늘의 주제

1. 포인터의 개념 


열 번째 시간입니다.^^

지난 번에는 반복문에 대하여 알아보았습니다.
정말 기초적인 문법들이라 꼭 알아두셔야 합니다~^^
앞으로 계속 쓰일거니깐요 ㅎ

자 그럼 오늘은 또 중요한 개념 포인터에 대해서 알아볼까요?ㅎ
출바알~~~~~~~~~~~~


# 포인터란?

포인터란 무엇일까요?
우리말로 하면 가리키는놈?ㅋㅋ 뭐 이런뜻이겠죠?
네 여기서도 똑같은 뜻입니다.

무언가를 가리키는 녀석을 포인터라고 부릅니다.

자, 포인터를 설명하기 전에 잠시 변수에 대해서 다시 생각해 봅니다.

우리가

int a = 15;

이렇게 선언을 해주면 컴퓨터는 메모리의 적당한 공간에 15라는 값을 저장하게 됩니다.
그것을 저는 이렇게 표현해 보겠습니다.
요로코롬 메모리 공간이 있다고 생각해 봅니다.


저기 메모리의 한 블럭을 하나의 상자라고 생각해 봅시다.
이렇게 사과박스 모양의 상자가 하나 있습니다.
속이 텅 비어있지요~
비어있는 메모리 공간이라고 생각합니다^^


비어있는 메모리 공간에 우리가 뭔가를 채워주려 합니다.
그냥 우리끼리 생각한대로 박스에 뭔가를 채워넣는다고 생각합시다.

어느 농부가 박스에다가 사과를 다섯개 담고 그 위에다가 메모를 해 둡니다.
이 박스가 위치한 주소는 '사랑시 행복구 고백동 1055번지' 라고 적고, 여기에는 '사과'가 들어있다. 그리고 그 사과 이름은 '마이애플'이다.
그리고 메모에는 없지만 내용물을 들여다 보니 5개가 들어있는 것을 알 수 있습니다.
 



이해 되시나요? 농부가 한 일이 컴퓨터가 해 준 일이라고 생각해 보면, 컴퓨터는 메모리에 값을 집어 넣어놓고 저렇게 기억을 해 둡니다.
그럼 요것을 컴퓨터가 하는일로 표현해 봅시다.
메모리의 공간(박스 속)에 '15'라는 숫자를 넣어놓고 그 상자의 종류는 'int' 정수형 이며, 이름은 'a'이다. 그리고 주소는 0x50F3A32E라고 기억합니다. 


이것이 우리가 변수를 메모리에 생성했을때 일어나는 일입니다. 조금 감이 오시나요?ㅎㅎ

그런데!!! 포인터는!!
저기 박스 안에 값이 다른 녀석의 주소값이 들어가게 되는 것입니다.
그것이 무슨 말이냐...?
감이 오시나요?

변수라는 녀석들은 자신의 메모리 영역에 '값'을 가지게 되죠.
위에 우리가 선언했던 int a는 15라는 값을 가지죠.

그리고

int *ptrA = &a;

이런식으로 선언을 해주게 되면,  "ptrA라는 이름을 가지는 int를 가리키는 포인터형에 a의 주소를 집어 넣겠다." 라는 뜻이 됩니다.
즉, 포인터형 변수는 그녀석이 가리키게 될 녀석의 변수형 포인터가 되고, 값은 가리키는 녀석의 주소를 가지게 됩니다.

그림으로 표현 해 봅니다.
이녀석은 포인터 박스입니다.
자신도 '사랑시 행복구 고백동 1055번지'라는 메모리 주소를 가지고 있고, 자신의 상자 속에는 다른 변수의 주소를 담고 있습니다.
다른 변수의 주소는 '솔로시 불행구 차임동 5043번지' 네요~


요것을 컴퓨터가 하는 것으로 바꿔보면?
int형 변수를 가리키는 포인터 ptrSolo는 0x50F3A32E번지에 할당이 되었고, 그 메모리 안에 0x305E438A라는 다른 변수의 주소값을 가지고 있네요.


포인터는 이렇게 다른 변수의 주소를 저장하고 있는 주소값을 가지는 변수라고 생각하시면 되겠습니다~

자.. 그럼 포인터가 왜 필요한가??
그것은 다음에 함수라는 녀석과 함께 알게 되실거예요~
일단 포인터의 개념이 이해될 때 까지 개념을 충실히 알아두시길 바랍니다^^*

이렇게 이론 설명을 마치고 그럼 다음 번에는 직접 간단히 몇줄 코딩으로 실습 해보도록 할게요~ ^0^




by yagom

twitter :@yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

저작자 표시 비영리 변경 금지
신고

'C' 카테고리의 다른 글

C <12>. 함수  (4) 2012.04.02
C <11>. 포인터 (2)간단실습  (0) 2012.03.27
C <10>. 포인터 (1)개념잡기  (3) 2012.03.23
C <9>. 반복문(2) do-while  (7) 2012.02.06
C <8>. 조건문(3) 3항 연산자  (7) 2012.01.28
C <7>. 조건문(2) switch  (6) 2011.12.14
Posted by yagom


티스토리 툴바