본 내용은 C언어의 배열 및 포인터 변수에 대해서 공부한 내용을 정리한 글
목차
C언어

1. 배열
1.1. 배열이란
- 같은 자료형을 가진 연속된 메모리 공간으로 이루어진 자료 구조
- 같은 자료형을 가진 변수들이 여러 개 필요할 떄 사용
- 많은 양의 데이터를 처리할 떄 유용
1.1.1. 배열의 선언

- 자료형 : 배열의 자료형을 지정
- 배열 이름 : 변수 선언하듯이 배열을 선언
- 배열 길이 : 배열 요소의 총 길이,
- 배열 길이를 변수로 설정하면 안 되고 상수로 설정해야 한다.
※ 배열 요소는 0부터 시작

2. 다차원 배열
다차원 배열 : 2차원 이상의 배열을 의미
즉 원래는 같은 행에 데이터를 나열해서 정리했다면
이제 행과 열이 추가되서 2차원, 3차원으로 차원이 증가된 배열

※ 1차원 배열 선언과 비슷한 방법으로 선언하지만 배열 길이를 선언할때 행[가로], 열[세로]를 지정한다.
- 행 단위로 2차원 배열의 선언과 동시에 초기화도 가능 : 중괄호 중첩
3. 포인터
3.1. 포인터란?
포인터 변수(포인터) : C언어의 장점
- 메모리의 주소를 저장하고 있다가 해당 주소로 데이터를 전달 하는 일
- 메모리의 주소를 저장하고 있다가 해당 주소로 데이터를 참조 하는 일
→ 즉 주소를 저장하는 변수
3.1.1. 포인터의 장점
- 메모리 주소를 참조해 다양한 자료형 변수들의 접근과 조작 용이
- 메모리 주소를 참조하여 배열과 같은 연속된 데이터에 접근과 조작 용이
- 동적 할당된 메모리 영역(힙영역)에 접근과 조작 용이
3.1.2. 포인터 변수의 선언

①. 자료형 뒤에 *붙여줌
②. 포인터 변수 이름 선언
③. Null로 포인터 변수 초기화!
‘모든 포인터 변수는 4바이트 이다
※ 포인터 변수를 잘못 선언하는 경우
- 변수에 주소를 선언하지 않은 경우
- 이상한 주소 저장하는 경우
3.2. 다차원 포인터 변수
- 2차원 이상의 포인터 변수
int** ip = NULL;
3.2.1. 2차원 포인터 변수의 역할
- 1차원 포인터 변수의 주소를 저장
#include <stdio.h>
int main(void)
{
int num=10;
int* p1=NULL;
int** p2=NULL;
p1=#
p2=&p1;
return 0;
}
3차원 포인터 변수 : 2차원 포인터 변수의 주소를 저장
3.3. 주소의 가감산
주소를 + - 연산도 가능
3.4. 함수 포인터

①. 자료형 : 가리키는 대상이 되는 함수의 자료형을 설정
②. 함수 포인터 이름 : 괄호와 *을 반드시 사용
③. 인수 자료형 목록
3.4.1. 함수 포인터의 필요성
• 일반적인 함수 호출보다 빠른 처리 속도를 기대한다
• 사용 분야 : 컴파일러, 인터프리터, 게임 프로그래밍과 같은 시스템 프로그래밍 분야
4. 포인터와 배열
배열의 주소도 포인터로 지정해서 사용할 수 있음. (1차원, 2차원, 3차원) → 배열 포인터
• 포인터 변수를 통한 1차원 배열 요소의 주소 접근
배열의 시작 주소를 저장 가능
또한 포인터들을 배열로 묶어서 사용도 가능 → 포인터 배열
4.1. 배열 포인터

①. 자료형 : 배열 포인터 변수가 저장하는 배열의 자료형
②. 배열 포인터 변수 이름 : 연산자와 배열 포인터 변수 이름을 함께 괄호로 묶음
③. 열의 길이 : 배열 포인터 변수가 가리키는 배열의 열의 길이를 지정
4.2. 포인터 배열

①. 자료형 : 포인터 배열의 자료형을 지정하고 *을 붙임
②. 포인터 배열 이름 : 주소를 저장할 배열의 이름을 지정
③. 배열 길이 : 주소를 저장할 배열의 전체 길이를 지정
4.3. 문자 배열과 포인터
- 문자 상수
- 작은따옴표 (‘ ‘) 내에 포함된 하나의 문자
- 키모드로 표현할 수 있는 영문자와 숫자, 특수 기호
- 문자 그 자체
- 문자 배열
- 문자 상수를 저장하고 있는 배열
- 배열에 저장된 문자 변경 가능
- 문자 배열과 포인터
- 배열에 저장된 문자를 포인터를 통해 접근
4.4. 문자열과 널(Null) 문자
- 문자열의 특징
- 큰따옴표 (“ ”) 내에 포함된 하나 이상의 문자
- 문자열의 끝에는 문자열의 끝을 알리는 널(Null)문자 즉, 종료 문자(\0) 삽입
- 문자열의 시작 주소를 알면 저장된 문자들에 접근 가능
- 문자열은 문자열 상수와 문자열 변수로 구분
- 문자열을 입력하고 출력할 때 서식문자 %s를 사용
- 메모리 공간에 연속으로 저장되어 있어 주소가 연속적이다
- 문자열의 시작 주소를 알면 모든 문자들에 접근 가능하다
- %s는 문자열의 시작 주소부터 종료 문자(\0)를 만날 때 까지 문자열을 출력
4.5. 널(Null) 문자와 널(NULL) 포인터
- 널(Null) 문자
- 종료문자 ‘\0’
- ASCII 코드 정수 0(10진수)
- 문자열 끝에 저장
- 널(NULL) 포인터
- 주소로 0을 의미
- 포인터 변수에 아무 주소도 저장하지 않겠다는 의미
- 널 포인터를 사용할 때는 반드시 대문자를 사용
4.6. 포인터 변수의 상수화
- const 키워드를 이용해 포인터 변수를 상수화
• 포인터 변수의 상수화의 의미
① 포인터 변수에 다른 주소를 저장하지 못하게 한다.
② 포인터 변수를 통해 메모리 공간의 값을 변경하지 못하게 한다.
→ 다른 주소가 들어오면 안되는거나 변경되면 안되는 값을 선언할 떄 사용
마무리
포인터 관련해서 개념이 혼란스럽게 섞일 수 있는 점을 주의!
손으로 디버깅해가면서 개념을 익혀야되는 점이 필요!
'IT > C' 카테고리의 다른 글
| [C언어] 기초 내용 정리 (조건문, 반복문, 함수) (0) | 2023.03.23 |
|---|---|
| [C언어] 기초 내용 정리 (변수, 연산자) (0) | 2023.03.23 |
| [C언어] 기초 내용 정리 (C 언어의 기본 구조, 표준 입출력) (0) | 2023.03.22 |
댓글