본문 바로가기

정보처리

C언어의 포인터, 배열, 구조체

728x90

1. 포인터

변수는 어떤 수나 문자를 저장하기 위해 사용하며 이 변수는 기억장소의 어느 위치에 대한 이름이며 그 위치는 주소로도 표현할 수 있음. C언어에서는 변수의 위치, 즉 주소를 제어할 수 있는 기능을 제공. 변수의 주소를 출력할 수도 있고 주소를 주소 변수에 저장할 수도 있음. 주소를 저장할 수 있는 변수를 포인터 변수라고 함.

- 포인터 변수를 선언할 때는 자료의 형을 먼저 쓰고 변수명 앞에 *을 붙임

- 포인터 변수에 주소를 저장하기 위해 변수의 주소를 구할 때는 변수 앞에 &을 붙임

- 실행문에서 포인터 변수에 *를 붙이면 해당 포인터 변수가 가리키는 곳의 값을 이야기함

 예 1)

#include <stdio.h>
main(){
	int a = 20;
    int *b;
    b = &a;
    
    *b = *b + 10;
    printf("%d %p %d\n", a, b, *b);
}

a = 20으로 시작하고, 포인터 변수 b를 선언, b에는 a의 주소를 저장시킴

*b는 a의 주소에 담긴 값을 가져오므로, *b = *b + 10은 20 + 10을 의미하며 a = a + 10과도 같은 의미

출력 결과 30, a의 주소값, 30이 출력됨

2. 배열

배열은 동일한 데이터 유형을 여러 개 사용하는 경우 이를 손쉽게 처리하기 위해 여러 개의 변수들을 조합해서 하나의 변수명으로 정의해 사용하는 것을 말함. 배열은 하나의 이름으로 여러 기억장소를 가리키기 때문에 배열에서 개별적인 요소들의 위치는 첨자를 이용하여 지정

1) 1차원 배열

- 1차원 배열은 변수들을 일직선상의 개념으로 조합한 배열

- 배열은 변수명 뒤에 대괄호가 []를 붙이고 그 안에 사용할 개수를 지정

- C언어에서는 배열의 위치가 0부터 시작

- C언어에서는 배열의 이름을 주소로 사용할 수 있음

- 형식

자료형 변수명[개수] - 자료형 : 배열에 저장할 자료의 형을 지정
- 변수명 : 사용할 배열의 이름으로 사용자가 임의로 지정
- 개수 : 배열의 크기를 지정

2) 2차원 배열

- 2차원 배열은 변수들을 평면, 즉 행과 열로 조합한 배열

- 형식

자료형 변수명[행개수][열개수] - 자료형 : 배열에 저장할 자료의 형을 지정
- 변수명 : 사용할 배열의 이름으로 사용자가 임의로 지정
- 행개수 : 배열의 행 크기를 지정
- 열개수 : 배열의 열 크기를 지정

3. 구조체

배열이 자료의 형과 크기가 동일한 변수의 모임이라면 구조체는 자료의 종류가 다른 변수의 모임.

1) 구조체의 정의

구조체를 정의한다는 것은 int나 char 같은 자료형을 하나 만드는 것을 의미

struct korea {
	char name[10];
	int population[100];
};

2) 구조체 변수의 선언

정수형 변수를 사용하려면 'int a'와 같이 선언한 후 사용하는 것처럼 구조체 변수를 사용하려면 먼저 정의한 구조체에 대한 변수를 선언해야 함

struct korea city *busan;

3) 구조체 멤버의 지정

구조체의 멤버는 모든 요소들이 개별적인 이름을 가지고 있으므로 구조체 멤버를 지정할 때는 구조체 변수와 함께 멤버 이름을 지정해야 함.

- '.'의 의한 지정 : 구조체 일반 변수를 이용해 구조체 멤버를 지정할 때

city.name = "서울";
city.population = 1000;

- '->'에 의한 지정 : 구조체 포인터 변수를 이용해 구조체 멤버를 지정할 때

busan -> name = "버스안";
busan -> population = 500;

- 구조체의 포인터 변수는 일반 포인터 변수처럼 *를 사용하여 멤버를 지정할 수 있음

(*busan).name = "버스안";
(*seoul).population = 1000;
728x90

'정보처리' 카테고리의 다른 글

JAVA 기초  (0) 2024.04.08
C언어 함수  (0) 2024.04.08
C언어의 제어문  (1) 2024.03.29
순서도와 C언어의 기본  (0) 2024.03.27
아키텍처 스타일  (0) 2024.03.26