개인노트
[C언어] 포인터와 배열의 관계 본문
배열의 이름은 포인터(메모리 주소값을 나타냄)이며 포인터 변수와는 달리 값을 바꿀 수 없는 상수형태의 포인터이다.
Source.c |
#include <stdio.h> int main(void) { int arr[] = { 1,2,3 };
printf("배열의 이름 : %p \n", arr); printf("첫번째 요소 : %p \n", &arr[0]); printf("두번째 요소 : %p \n", &arr[1]); printf("세번째 요소 : %p \n", &arr[2]); getchar(); } |
Source.c
1. 배열 이름의 주소 값과 배열의 첫번째 주소 값이 동일한 것을 알 수 있다.
2. 두번째 요소와 세번째 요소의 값의 차이가 4인것을 보아 'int형 배열 요소간 주소 값의 차는 4byte이다.'
3. 변수 앞에 기호 &를 붙이면 주소 값을 나타낸다.
Source2.c |
#include <stdio.h> int main(void) {
int arr1[] = { 1,2,3 }; double arr2[] = { 1.1,2.2,3.3 }; printf("%d, %g \n", *arr1, *arr2); /* 변수앞에 *가 붙으면 포인터 변수이다. 배열 이름의 메모리 주소 값은 첫번째 배열의 주소값과 같다. 즉, *arr1은 배열의 첫번째 값을 참조하는 것이다.*/ *arr1 += 100; *arr2 += 100.5; printf("%d, %g \n", *arr1, *arr2); // %g = 부동소수점 getchar(); } |
Source2.c
1. 배열의 이름도 포인터이기 때문에 * 연산이 가능하다.
Source3.c |
#include <stdio.h> int main(void) { int arr[] = { 10,20,30 }; int * ptr = arr; // int * ptr = &arr[0]과 동일한 문장 printf("%d, %d \n", ptr[0], arr[0]); printf("%d, %d \n", ptr[1], arr[1]); printf("%d, %d \n", ptr[2], arr[2]); printf("%d, %d \n", *ptr, *arr); getchar(); } |
Source3.c
1. 포인터를 배열의 이름처럼 사용이 가능하다.
'C > 문법' 카테고리의 다른 글
[C언어] 포인터 배열 (0) | 2017.06.30 |
---|---|
[C언어] 포인터와 문자열 (0) | 2017.06.30 |
[C언어] 포인터란? (0) | 2017.06.28 |
[C언어]scanf_s 함수를 이용한 배열의 문자열 입력 (0) | 2017.06.27 |
[C언어] 배열의 문자열과 널(NULL) (0) | 2017.06.26 |