[C언어] 포인터와 배열
ET의 공부/C언어2021. 1. 3. 19:43
배열의 이름은 0번째 배열 원소의 주소다.
#include <stdio.h>
#define Size 10
int main () {
int Arr[Size] = {0}; //배열 선언,초기화
printf("배열 이름의 값: %p\n",Arr);
printf("배열 첫번째 원소의 주소값:%p\n",&Arr[0]);
return 0;
}
//배열 이름의 값: 0x7ffeefbff5a0
//배열 첫번째 원소의 주소값:0x7ffeefbff5a0
위와 같이 배열 Arr의 값(변수명)은 Arr[0]의 주소와 일치합니다. 주소 값은 프로그램이 실행되고 있는 동안 상수로 고정됩니다. 하지만 이들은 포인터 변수에 값으로 대입이 가능합니다. 아래의 코드를 살펴보겠습니다.
#include <stdio.h>
#define Size 10
int main () {
//각 자료형 배열 생성
char c_Arr[Size] = {0};
short s_Arr[Size] = {0};
int i_Arr[Size] = {0};
//각 자료형 포인터 생성
char *c_ptr;
short *s_ptr;
int *i_ptr;
//배열의 이름(주소)를 포인터 변수에 대입
c_ptr = c_Arr;
s_ptr = s_Arr;
i_ptr = i_Arr;
for(int i = 0; i<Size; i++){
printf("+%d char: %p short: %p int: %p \n",i, c_ptr+i, s_ptr+i, i_ptr+i);
}
return 0;
}
//+0 char: 0x7ffeefbff5be short: 0x7ffeefbff5a0 int: 0x7ffeefbff570
//+1 char: 0x7ffeefbff5bf short: 0x7ffeefbff5a2 int: 0x7ffeefbff574
//+2 char: 0x7ffeefbff5c0 short: 0x7ffeefbff5a4 int: 0x7ffeefbff578
//+3 char: 0x7ffeefbff5c1 short: 0x7ffeefbff5a6 int: 0x7ffeefbff57c
//+4 char: 0x7ffeefbff5c2 short: 0x7ffeefbff5a8 int: 0x7ffeefbff580
//+5 char: 0x7ffeefbff5c3 short: 0x7ffeefbff5aa int: 0x7ffeefbff584
//+6 char: 0x7ffeefbff5c4 short: 0x7ffeefbff5ac int: 0x7ffeefbff588
//+7 char: 0x7ffeefbff5c5 short: 0x7ffeefbff5ae int: 0x7ffeefbff58c
//+8 char: 0x7ffeefbff5c6 short: 0x7ffeefbff5b0 int: 0x7ffeefbff590
//+9 char: 0x7ffeefbff5c7 short: 0x7ffeefbff5b2 int: 0x7ffeefbff594
위 코드는
1. char(1바이트) short(2바이트) int(4바이트)의 자료형을 갖는 배열을 선언하고
2.char(1바이트) short(2바이트) int(4바이트) 포인터를 선언, 각 자료형 배열의 주소 값을 대입합니다.
3. 배열의 크기(10)만큼 포인터 값에 i를 더해 출력을 합니다.
결과를 봤을때 처음 주소 값이 1이라면 1,2,3,4,5...처럼 증가해야 하는 것이 맞는 거 같지만 1바이트 자료형인 char를 제외하면 , 2,4바이트씩 주소 값이 증가한 것을 보실 수 있습니다. 포인터 변수에 "더한다"라는 개념은 주소 단위를 더한다 라고 생각하시면 됩니다. 배열에서는 +1은 다음 원소로의 이동을 뜻하기도 합니다.
이를 이용하여 배열에 원소에 접근, 그 값을 얻는데 포인터가 사용될수 있습니다.
arr[n] == *(arr+n) 이 성립합니다.
#include <stdio.h>
#define Size 10
int main () {
int i_Arr[Size] = {0,1,2,3,4,5,6,7,8,9};
int *i_ptr;
i_ptr = i_Arr;
for(int i = 0; i<Size; i++){
printf("i_Arr[%d] : %d \n",i, *(i_ptr+i));
}
return 0;
}
//i_Arr[0] : 0
//i_Arr[1] : 1
//i_Arr[2] : 2
//i_Arr[3] : 3
//i_Arr[4] : 4
//i_Arr[5] : 5
//i_Arr[6] : 6
//i_Arr[7] : 7
//i_Arr[8] : 8
//i_Arr[9] : 9
'ET의 공부 > C언어' 카테고리의 다른 글
[C언어] 포인터 연산 (0) | 2021.01.03 |
---|---|
[C언어] 함수의 매개변수 배열,포인터 (0) | 2021.01.03 |
[C언어] 이차원 배열 (0) | 2020.12.29 |
[C언어] 배열 그리고 배열 초기화 (0) | 2020.12.29 |
[C언어] 포인터 알아보기 (0) | 2020.12.22 |
댓글()