반응형
배열을 포인터로 가리킬 때, 포인터는 배열이 시작되는 주솟값을 가리킨다.
x[0] = *p; // 배열 x가 시작하는 x[0]에 포인터 p를 저장한다.
// x[0]에는 포인터 p가 가리키는 값이 저장된다.
&x[0] == p == x // 임의의 배열에 대한 주솟값은 배열이 시작되는 주소이다.
// 즉, 배열 x의 주소값은 배열이 시작되는 x[0] 값이 위치한 주소이며,
// 배열 x를 출력하면 주솟값이 출력된다.
x[1] == *(p + 1) // x[1]을 나타내기 위해서는 포인터 p의 주솟값에서 +1을 해주어야 한다.
// 이때 'p + 1'은 포인터 변수의 데이터 타입에 따라 크기가 다르다.
#include<stdio.h>
#define SIZE 5
int main(){
int x[SIZE] = {10, 20, 30, 40, 50};
int *p; // 정수형 포인터변수 선언
p = x; // x는 배열이므로 배열이 시작하는 주솟값을 가지고 있다. 즉, 배열명은 배열의 시작주소를 뜻한다.
// p = &x[0]과 동일한 의미를 가진다.
printf("x : %d\n", x);
printf("p : %d\n", p);
printf("\n--------------------------\n");
printf("x[0] : %d\n", x[0]);
printf("*p : %d\n", *p);
printf("\n--------------------------\n");
printf("x[1] : %d\n", x[1]);
printf("*(p + 1) : %d\n", *(p + 1));
printf("\n--------------------------\n");
printf("*(p + 1) : %d\n", *(p + 1));
printf("*p + 1 : %d\n", *p + 1); // *p는 산술연산자(+)보다 높기 때문에, +보다 먼저 계산된다.
// 따라서 '*p == 10', 그리고 '+ 1'하여 '11'이 출력된다.
printf("\n--------------------------\n");
for(int i = 0; i < 5; i++){
printf("x[%d] : %d\n", i, x[i]);
printf("*(p + %d) : %d\n", i, *(p + i));
}
printf("\n--------------------------\n");
printf("*p++\n");
for(int i = 0; i < 5; i++)
printf("%d\n", *p++);
return 0;
}
#include<stdio.h>
int main(){
int arr[] = {1, 2, 3};
int *p = arr;
printf("배열의 이름 : %p\n", arr); // %p는 주소를 출력한다.
printf("arr[0] = %p\n", &arr[0]);
printf("arr[1] = %p\n", &arr[1]);
printf("arr[2] = %p\n\n", &arr[2]);
printf("arr[0] = %p\n", p);
printf("arr[1] = %p\n", p + 1);
printf("arr[2] = %p\n\n", p + 2);
printf("arr[0] = %d\n", &arr[0]); // 배열에 저장된 값을 주솟값 형식(%p)으로 출력한다.
printf("arr[1] = %d\n", &arr[1]);
printf("arr[2] = %d\n\n", &arr[2]);
printf("arr[0] = %p\n", arr[0]);
printf("arr[1] = %p\n", arr[1]);
printf("arr[2] = %p\n\n", arr[2]);
printf("%d : %d : %d : %d\n", arr[0], p[0], *p, *arr);
printf("%d : %d : %d : %d\n", arr[1], p[1], *(p + 1), *(arr + 1));
printf("%d : %d : %d : %d\n", arr[2], p[2], *(p + 2), *(arr + 2));
return 0;
}
포인터는 배열처럼 사용이 가능하다.
#include<stdio.h>
int main(){
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr; // 배열의 이름은 배열의 시작주소를 나타낸다. == &arr[0]
for(int i = 0; i < 5; i++)
printf("p[%d] = %d\n", i, p[i]);
return 0;
}
반응형
'C' 카테고리의 다른 글
[C언어] 실습: 0~360도까지 10도 단위로 sin 값 출력하기 (0) | 2021.02.17 |
---|---|
[C언어] 실습: 국어, 영어, 수학 점수를 입력받은 후, 총점, 평균 구하기 (Array) (0) | 2021.02.15 |
[C언어] 포인터(Pointer) - 1 (0) | 2021.02.13 |
[C언어] 실습: 암호 입력 프로그램 구현하기 (5) | 2021.02.12 |
[C언어] 문자열 함수(strlen, strcpy, strcmp) (0) | 2021.02.11 |