티스토리 뷰
안녕하세요, IT디자이너입니다.
이번 포스팅은 포인터와 배열의 관계 심화와 더불어 포인터 함수에 관하여 포스팅 하도록 하겠습니다.
이번에 포인터와 배열은 밀접한 관련이 있다고 하였습니다.
포인터와 연관된 배열은 2가지가 있는데요 배열 포인터와 포인터 배열 입니다.
배열 포인터는 배열을 가리키는 포인터입니다. 그리고 포인터 배열은 포인터로 이루어진 배열이라고 생각하시면 되겠는데요
조금 더 자세하게 설명 드리도록 하겠습니다.
1. 배열 포인터
배열 포인터는 배열을 담을 수 있는 포인터입니다. 설명으로는 이해가 어려우니 소스코드로 보여드리겠습니다.
위 사진을 보시게 되면은 배열을 포인터에 대입하여 초기화하는 코드입니다. 또한 2차원 배열 포인터를 초기화 하는 방법 또한 다른데요
2차원 배열 포인터는 두번째 대괄호 크기를 지정하고 column의 길이를 대입하여야 합니다. 그 이유는 전에 배열에 관하여 포스팅을 보셨다면, 2차원 배열도 어차피 메모리상에서는 1차원 배열과 다름 없다는 점을 기억하실겁니다.
하지만 C언어에서 2차원 배열을 외부적으로 계산할 때는 다릅니다.
즉 외부적으로는 arr[0][0] 에서 arr[0][1] 로 증가할 때 int 데이터타입 기준으로 8byte 씩 증가되는 것을 볼 수 있을 것입니다.
즉, 2차원 배열을 배열 포인터에 대입하여 초기화할 때는 2번째 [] 의 길이를 알려줘야 두번째 []의 인덱스가 커질 때 마다 얼마만큼
byte가 증가하는지 알수 있기 때문입니다.
그리고 2차원 배열포인터를 선언하실 때 주의해야할 점은 바로 연산자의 우위입니다.
대괄호 연선자가 포인터 연산자보다 우위에 있기 때문에 대괄호 연산을 한 후 *(asterisk) 연산자가 연산을 하기 때문에 전혀 다른 값을
가리키게 됩니다.
int arr[2][2] = {1,2,3,4}
int (*ptr)[2] = arr;
이 규칙은 꼭 지켜주셔야합니다.!!!!
이 방법을 활용한다면은 함수에 매개변수로 배열을 전달할 수 있겠죠?
위 사진처럼 함수의 매개변수로 배열을 전달할 수 있습니다.! 여기서 주의해야할 점은 배열의 사이즈인데요, 매개변수로 배열만 전달할 경우에는 전달받은 함수에서는 배열의 첫번째 주소만 받았기 때문에 배열의 사이즈를 구할 수 있는 방법이 없습니다. 그렇기 때문에 꼭 배열의 길이를 연산 후에 매개변수로 같이 전달해주셔야합니다.!!
2. 포인터 배열
배열 포인터를 배우셨으니 이제는 포인터 배열에 대해서 설명드리도록 하겠습니다. 포인터 배열이란 말 그대로 포인터를 담는 배열입니다.
이처럼 포인터들을 배열에 담아서 관리를 할 수 있습니다.!! 포인터 배열은 포인터배열 자체를 함수의 인자로 전달하여 다른 함수에서 배열 요소들의 주소로 접근하여 컨트롤이 가능합니다.
3. 함수 포인터
마지막으로 함수 포인터에 관하여 설명드리도록 하겠습니다. 지금까지 변수와 배열의 관한 포인터가 있었는데요, 그러면 함수에 관한 포인터도 있어야겠지요?
우리가 그동안 아무렇지 않게 사용했던 함수의 이름은 함수가 정의된 메모리의 주소를 가리킵니다.
이렇게 말이죠, 그렇기 때문에 함수의 이름은 "상수형 포인터 함수" 라고도 부릅니다.
이렇게 함수의 이름을 포인터 함수에 대입하여 초기화한 후 포인터 함수를 이용해서 대입한 함수의 기능을 사용할 수 있습니다.
이렇게 포인터를 활용하는 방법에대 해서 3번째 포스팅을 하였습니다. 추후 추가적으로 유용하게 쓰일 수 있는 포인터 활용법이 생각나면
추가적으로 포스팅하도록 하겠습니다.!
감사합니다.
'Language > C 언어' 카테고리의 다른 글
Debug 모드와 Release 모드 디버깅 (0) | 2020.03.18 |
---|---|
C언어와 어셈블리어 !! (0) | 2020.03.18 |
C언어의 꽃 "포인터" !! 배열과 포인터의 관계 - 2 (0) | 2020.02.09 |
C언어의 꽃 "포인터" !! - 1 (0) | 2020.02.09 |
C언어의 배열 사용방법 (0) | 2020.02.09 |
- Total
- Today
- Yesterday
- C언어 #C++ #어셈블리어 #열거형 데이터타입 #IT디자이너
- C언어 #C++ #switch #if #어셈블리어 #switch문 사용 이유 #IT디자이너
- C언어 #C++ #어셈블리어 #재귀함수 #IT디자이너
- QUEUE #큐 #자료구조 #원형 큐 #Circle Queue #IT디자이너 #큐 과제 #C언어 #C++언어
- C언어 #C++ #IT디자이너 #C++ 함수
- C언어 #포인터 #배열 포인터 #포인터 배열 #함수
- C언어 #IT디자이너
- C언어 #자료구조 #C++ #연결리스트 #리스트 #알고리즘 #IT디자이너
- IT디자이너 #C언어 #C++ #속성지정자 #기억클래스 #IT #const #static #register #volatile #extern #auto #s
- C언어 #C++ #자료구조 #알고리즘 #IT디자이너 #버블 정렬 #BubbleSort
- IT디자이너 #QuickSort #퀵정렬 #C언어 #C++ #자료구조 #알고리즘
- C언어 #C++ #어셈블리어 #IT디자이너 #비트연산자 #연산자 #C언어의 비트 연산자
- C언어 #스트림 #버퍼링 #표준 입출력 함수 #C++언어 #IT디자이너
- C언어 #IT디자이너 #C++언어
- C언어 #C++ #IT디자이너
- C언어 #C++ #IT디자이너 #함수 #재귀 함수 #스택 #자료구조 #페인팅
- 어셈블리어 #IT디자이너 #C언어 #C++언어 #어셈블리 #어셈블러
- C언어 #포인터 #IT디자이너
- Debug #C언어 #C++ #비쥬얼스튜디오 #Release #IT
- C언어 #C++ #시간 함수 #타이밍 맞추기 #timer interrupt #IT디자이너
- 스택 #자료구조 #Stack #IT디자이너 #알고리즘 #C언어 #스택 과제 #C++
- IT디자이너 #C언어 #C++ #IT디자이너 #코딩테스트
- 디버그 #Debug #Release #디버그와 릴리즈 차이 #C언어 #C++언어 #어셈블리어
- C언어 #C++ #삼각함수 #IT디자이너 #문제풀이 #2진수 #16진수 #비트 #bit #비트연산자
- C언어 #C++ #구조체 정렬 #pragma #IT디자이너
- C언어 #C++ #어셈블리어 #함수 호출 규약 #IT디자이너 #비쥬얼 스튜디오 #IT
- C언어 #C++ #어셈블리어 #구조체 #구조체 특징 #IT디자이너
- C언어 #IT디자이너 #포인터 #배열 #포인터와 배열
- C언어 #C++ #캐시hit #캐시라인 #캐시무효화
- C언어 #C++ #파일 입출력 #텍스트파일 #IT디자이너
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |