포인터 배열과 배열 포인터
포인터 "배열"
-정수형 배열: 정수형 변수들을 묶어놓은 묶음
-실수형 배열: 실수형 변수들을 묶어놓은 묶음
배열 "포인터"
-정수형 포인터: 정수형 변수의 주소를 저장하는 포인터
-실수형 포인터: 실수형 변수의 주소를 저장하는 포인터
<포인터 배열의 생성 방법>
자료형*포인터 배열명[크기];
<포인터 정수형 배열의 생성 방법>
int * score[3];
<배열 포인터의 생성 방법>
자료형(*배열포인터명)[크기];
<정수형 배열 포인터의 생성 방법>
int (*score)[3];
#include <stdio.h>
void main() {
int a = 10, b = 20, c = 30;
int* ar[3];
ar[0] = &a;
ar[1] = &b;
ar[2] = &c;
for (int i = 0; i < 3; i++) {
printf("ar[%d]: %d\n", i, *ar[i]);
}
*ar[0] = 100;
printf("a: %d\n", a);
}
<결과>
ar[0]: 10
ar[1]: 20
ar[2]: 30
a: 100
*ar[0] = 100; => *ar[0]의 주소로 접근하여 a의 값을 변경시킴
문자열의 포인터배열
#include <stdio.h>
void main() {
char* name[5] = { "메모리", "CPU", "모니터", "메인보드", "하드디스크"};
int code_number;
printf("Code Number: ");
scanf_s("%d", &code_number);
if ((code_number >= 0) && (code_number <= 4)) {
printf("제품명: %s\n", name[code_number]);
}
else {
printf("제품 코드 입력 오류!");
}
}
<결과>
Code Number: 2
제품명: 모니터
Code Number: 6
제품 코드 입력 오류!
하나의 "문자열"은 char*(문자형포인터)로 저장할 수 있다!
#include <stdio.h>
void main() {
int i, j;
int num1 = 10, num2 = 20, num3 = 30, num4 = 30;
//정수형 변수
int arr[2][2] =
{
{1,2},
{3,4}
};
int* ptr_num[4] = {&num1, &num2, &num3, &num4}; //포인터배열
//정수형 변수의 주소를 저장하는 각각의 정수형 포인터의 요소로 이루어진 정수형 포인터 배열
int(*ptr_arr)[2] = arr; //arr==&arr[0] 배열 포인터
for (i = 0; i < 4; i++) {
printf("%d ", *ptr_num[i]);
}
printf("\n");
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
printf("%d ", ptr_arr[i][j]);
}
printf("\n");
}
}
<결과>
10 20 30 30
1 2
3 4
arr==&arr[0]
arr[0]={1,2} =>하나의 배열을 뜻한다 (크기가 2인 정수형의 값을 묶어놓은 배열)
int* ptr_num[4] = {&num1, &num2, &num3, &num4}; //포인터배열
각각의 요소가 포인터로 이루어져 있는 배열이다
int(*ptr_arr)[2] = arr; //arr==&arr[0] 배열 포인터
배열의 주소를 저장하는 포인터
728x90
'Dev. > C++' 카테고리의 다른 글
함수값 반환하기 문제 (0) | 2022.03.27 |
---|---|
배열과 포인터 종합문제 (0) | 2022.03.27 |
포인터와 함수의 관계/call by value/call by reference (0) | 2022.03.27 |
visual studio 디버깅 하기 (0) | 2022.03.26 |
포인터의 목적/메모리의 동적 할당 (0) | 2022.03.25 |
댓글