𝗣𝗿𝗼𝗷𝗲𝗰𝘁 𝗔𝗩𝗦

Project AVS Since 2023.01.27

소프트웨어 | Software/프로그래밍 | C언어 | C

내가 보려고 만드는 C언어 정보 모음(심화) #배열 #포인터

아벵 AVS 2023. 5. 10. 10:39

CTRL + F 로 키워드 검색

본 글은 필자가 C언어를 공부하면서 쓰는 일종의 저장 노트입니다.

필자도 배우는 입장으로

필요하신 분 들은 적절히 사용하면 좋을 듯 하다.

 

비주기적 업데이트 예정

 

 

 2차원 배열


※ int arr[세로길이][가로길이]

ex) int arr[2][3] 

 

※ 2차원 배열 초기화 방법

int main(void)
{
	int arr[4][4] = {
		{1,2,3,4},
		{5,6,7,8},
		{0},
		{1}
	};

※ 행 단위로 초기화 해야함

※ 나머지는 0으로 초기화

int main(void)
{
	int arr[4][4] = {
		1,2,3,4,
		5,6,7,

	};

※ 1열1행부터 초기화

 

※ 길이 생략 선언 가능

ex) int avs[ ] [4] = {0,1,2,3,4,5}

단 세로 길이는 생략 불가

 

 

더블,트리플 포인터


※ 포인터 변수를 가리키는 포인터를 더블 포인터라 칭한다.

 

※  ***가 3개 포함이면 당연히 삼중 포인터 변수

 

 

배열의 포인터 형


int * arr1[20] // 길이가 20인 int형 포인터 배열

 

int arr[20] // arr은 int형 포인터

 

2차원 배열이름 포인터


2차원 배열의 이름은 더블 포인터 형이 아니다.

 

2차원 배열에서 만약int array[2][4] 와 같이 있으면array는 첫 번째 요소를 가르키는 동시에 배열 전체를 의미array[0]는 첫 번째 요소를 가르키는 동시에 1행만을 의미차이점을 꼭 숙지하자.

 

 

2차원 배열에서의 포인터 형은 배열의 가로 길이에 따라 달라진다.int ar[2][3]ar, ar+1 의 차이는 주소 값 차이는 12int arar[3][2] arar,arar+1 의 주소 값 차이는 8

 

 

int (*ptr) [5]의 의미ptr : 포인터 변수int : int형5 : 한 번에 5칸씩 건너뜀

 

 

int * qwe[4]; // 포인터 배열 -> int형 포인터 변수들로 이루어진 포인터 배열
int (*qwe1) [4]; 배열 포인터 -> 가로길이가 4인 2차원 배열을 가리키는 용도의 포인터 변수

 

함수인자로의 전달

#include <stdio.h>


void Func(int parr[][4], int parr_2[][5])
{
	printf("test \n")
}

int main(void)
{
	int arr[2][4];
	double arr2[4][5];
	Func(arr, arr2);

	return 0;
}

int (*parr)[4]
int parr[][4]
파라미터 선언에서 두 표현은 동일 의미



arr[2][1]=4;  =  (*(arr+2))[1]=4;

1번째식 arr[2]를 A로 치환
A[1]=4;
*(A+1)=4;
*(arr[2]+1)=4;
여기서 arr[2] = *(arr+2)

*(*(arr+2)+1) =4; 라는 식이 나온다.

 

함수 포인터


배열의 이름은 배열의 시작주소 값을 의미

함수의 이름도 함수가 저장된 메모리 공간의 주소 값을 의미 (상수 형태)

 

함수 포인터 변수 : 함수의 주소 값을 저장하기 위한 포인터 변수

 

int Func (int num)

 

반환형  : int

파라미터 선언 : int num

 

Func : 함수의 주소 값을 의미하는 상수형태의 함수 포인터

 

함수이름의 포인터 형은 반환형과 파라미터의 선언을 통해서 결정

 

함수 포인터 변수 선언 방법

int (*FUNC) (int)

반환형 , 포인터 , 매개변수 선언

순으로 구분

 

void


void형 포인터 변수는 무엇이든지 담을 수 있다

ㄴ포인터 연산 불가 / 값의 변경과 참조도 불가능 하다. (type이 정해지지 않음)

 

 

 

반응형