개인노트

[C언어] 포인터와 배열의 관계 본문

C/문법

[C언어] 포인터와 배열의 관계

BillnairK 2017. 6. 29. 14:18

배열의 이름은 포인터(메모리 주소값을 나타냄)이며 포인터 변수와는 달리 값을 바꿀 수 없는 상수형태의 포인터이다.


 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
Comments