easy software

C언어 포인터와 배열의 이해 본문

C언어/포인터와 배열

C언어 포인터와 배열의 이해

JAVA 웹개발자 2015. 1. 17. 18:02

저번 시간에는 포인터와 배열이 어떤 관계인지 확인해봤습니다.

 

이번 글에서는 예제를 풀어보도록 할테니, 개념과 기본 정보를 원하는 분들은

 

아래의 글을 확인해 주세요.

 

이제 간단한 예제를 통해 그 둘의 관계를 확인해 보도록 합시다.

 

예제 1

 

1. 우선 길이가 5인 배열을 선언하고 1~5로 값을 초기화 합니다.

 

2. 그리고 포인터를 선언하여 배열의 주소값을 가리키게 합니다.

 

3. 후에 포인터 연산을 통하여 배열의 요소값을 2씩 증가시킨 후 출력해봅시다.

 

이 문제는 arr[i] = = *(arr+i)의 개념을 묻는 문제입니다.

 

코드보시죠.

 

#include <stdio.h>

 

int main(void){

 

 //길이가 5인 int형 배열 선언
 int arr[5] = { 1, 2, 3, 4, 5 };
 
 //포인터변수 p가 arr의 첫번째 주소를 가리키게 함
 int* p = arr;

 

 //포인터p를 이용하여 배열을 조작(값을 2씩 증가)후 출력
 for (int i = 0; i < 5; i++)
      *(p + i) += 2;//arr[i] 와 *(p+i)는 동일합니다

 

      for (int i = 0; i < 5; i++)
      //값은 포인터 변수로 조작했지만 arr에 그대로 저장되어 있습니다
          printf("arr[%d]의 값 %d \n", i, arr[i]);

 

 return 0;

}

 

 

예제 2

 

이번에도 비슷한 맥락의 문제입니다.

 

1. 우선 길이가 5인 배열을 선언하고 1~5로 값을 초기화 합니다.

 

2. 그리고 포인터를 선언하여 배열의 주소값을 가리키게 합니다.

 

3. 포인터를 이용하여 배열요소의 순서를 뒤바꾼 후 출력합니다.

 

이 문제는 포인터를 배열의 이름처럼 사용하는 방법을 아는지 묻는 문제입니다.

 

플러스해서 배열의 구조를 이해하여 순서를 뒤바꾸는 것을 요구하고 있습니다.

 

아래 코드보시죠.

 

#include <stdio.h>

 

int main(void){

 

 int arr[5] = { 1, 2, 3, 4, 5 };
 int* p = arr;
 int temp; //임시변수

 

     //포인터 p를 이용하여 배열의 순서를 뒤짚음
     for (int i = 0; i < 5 / 2; i++){
          temp = p[i];//임시변수에 i번 차례의 맨 앞 포인터값을 저장
          p[i] = p[4 - i];//i번 차례의 맨 앞 포인터에 맨 뒤 포인터 값을 저장
          p[4 - i] = temp;//i번 차례의 맨 뒤 포인터에 맨 앞 포인터 값을 저장
     }

 

 //뒤짚혀있는 배열값을 출력
 for (int i = 0; i < 5; i++)
      printf("%d ", p[i]);

 

 printf("\n");

 

 return 0;


}

Comments