Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- i2c 통신
- atmega 128a
- Linked List
- FND
- soc 설계
- LED
- prescaling
- half adder
- DHT11
- hc-sr04
- KEYPAD
- D Flip Flop
- ATMEGA128A
- dataflow modeling
- ring counter
- stop watch
- gpio
- test bench
- Pspice
- verilog
- uart 통신
- structural modeling
- java
- pwm
- BASYS3
- vivado
- behavioral modeling
- Recursion
- Algorithm
- Edge Detector
Archives
- Today
- Total
거북이처럼 천천히
Pointer arry (포인터 배열) 본문
1. 포인트 배열이란 무엇인가?
- 같은 자료형을 갖는 포인트들을 모아 만든 배열
- 포인트 선언과 포인트 배열 선언은 다음과 같다.
// 포인트 선언
int *p_data;
// 포인트 배열 선언
// int *형 포인트를 3개를 모아 만든 배열
int *p_arry[3]
2. 포인트 배열의 사용 예시
- 포인터 배열로 여러 개의 문자열을 저장 및 출력.
#include <stdio.h>
int main(void) {
char* p_string[5];
p_string[0] = "dog";
p_string[1] = "elephant";
p_string[2] = "horse";
p_string[3] = "tiger";
p_string[4] = "lion";
for (unsigned char i = 0; i < (int)(sizeof(p_string) / sizeof(p_string[0])); i++)
printf("%s\n", p_string[i]);
return 0;
}
- p_string 배열명을 갖는 배열을 생성하였으며, 각각 원소들은 char *형 포인터이다.
- 대입 연산자를 통해 문자열 상수의 주소 값을 각각 원소인 char*형 포인터에 저장한다.
3. 포인트 배열의 초기화
// 1차원 포인터 배열 초기화
char *p_array[5] = {"dog", "elephant", "horse", "tiger", "lion"};
// 2차원 배열 초기화
char animail[5][20] = {"dog", "elephant", "horse", "tiger", "lion"};
- 1차원 포인터 배열은 각각의 문자열 상수의 메모리 주소값을 저장한다.
- 2차원 배열은 2차원 배열 공간에 각 문자를 저장한다.
4. 포인터 배열의 활용 - 2차원 배열으로 활용
- 이전 예시에서 보았던 포인터 배열에 문자열을 저장했던 것처럼 포인터 배열을 2차원 배열처럼 활용할 수 있다.
- 다음은 포인터 배열을 2차원 배열처럼 활용한 예시이다.
#include <stdio.h>
int main(void) {
int p_array0[4] = {1, 2, 3, 4};
int p_array1[5] = { 5, 6, 7, 8, 9 };
int p_array2[6] = { 10, 11, 12, 13, 14, 15 };
int* p_list_of_array[3] = { p_array0, p_array1, p_array2 };
int size[3] = { 4, 5, 6 };
for (unsigned char i = 0; i < 3; i++) {
for (unsigned char j = 0; j < size[i]; j++) printf("%5d", p_list_of_array[i][j]);
printf("\n");
}
return 0;
}
- p_array0, p_array1, p_array2 는 int형 배열이지만, 각각 사이즈가 다른 int형 배열이다.
- 각각 배열명은 첫 번째 원소가 저장된 메모리 공간의 주소값을 갖는다.
- 포인터 배열인 p_list_of_array는 int*형 배열이며, 각 원소들은 int *형 포인터이다.
- 포인터 배열인 p_list_of_array를 초기화하면서 각 포인터 원소에 대입했기 때문에 각 원소들은 각 배열의 첫 번째 메모리 공간의 주소값을 갖는다.
- p_list_of_array[0] = p_array0, p_list_of_array[1] = p_array1, p_list_of_array[2] = p_array2
- 따라서 2차원 배열처럼 포인터 배열을 활용할 수 있다.
5. 2차원 배열이 아닌 포인터 주소 연산을 통해 접근
- 위 예시에서 포인터 배열을 2차원 배열처럼 활용할 수 있다고 했다.
- 따라서 2차원 배열의 원소 접근 방식을 사용할 수 있었지만, 포인터 주소 연산을 통해 접근은 어떻게 할까?
- "포인터 배열의 각 원소는 배열의 첫 번째 원소의 메모리 주소 값이다." 라는 점을 이용하면 다음과 같이 작성할 수 있다.
// 2차원 배열 접근
p_array[2][3]
// 포인터 주소 연산
*(p_array[2]+3)
'C' 카테고리의 다른 글
배열 포인터 (1) | 2024.06.19 |
---|---|
이중 포인터 (1) | 2024.06.19 |
Register variable (0) | 2024.06.18 |
C 언어의 컴파일 과정 (0) | 2024.06.06 |
Deque (0) | 2024.05.31 |