신규 블로그를 만들었습니다!

2020년 이후부터는 아래 블로그에서 활동합니다.

댓글로 질문 주셔도 확인하기 어려울 수 있습니다.

>> https://bluemiv.tistory.com/

포인터와 배열은 밀접한 관계가 있다.

 

1. 배열 이름과 메모리 주소

배열의 이름은 첫번째 배열 요소의 메모리주소를 뜻한다.

예를들어, int[] nums = { 1, 3, 4, 2, 5 }; 라는 배열이 있다고 하면 printf() 함수를 통해 nums 를 출력해보면 nums[0]의 메모리 주소가 출력되는것을 알 수 있다.

즉, nums와 &nums[0]는 같다.

 

#include <stdio.h>
 
int main(void) {
 
    int nums[3] = { 2, 5, 8 };
    
    printf("nums = %x\n", nums);
    printf("&nums[0] = %x\n", &nums[0]);
 
    return 0;
}
​

 

 

 

 

2. 포인터를 이용한 배열 접근방법

포인터를 이용해서 배열에 접근할 수 있다.

#include <stdio.h>
 
int main(void) {
 
    int nums[3] = { 2, 5, 8 };
    
    // nums 배열의 주소
    int* pNums = nums;
    
    printf("pNums = %x\n", pNums);
    printf("*pNums = %d\n", *pNums);
    printf("*(pNums + 1) = %d\n", *(pNums + 1));
    printf("*(pNums + 2) = %d\n", *(pNums + 2));
 
    return 0;
}
​

 

 

결국은 위의 결과를 보면 포인터변수인 pNums를 이용해서 배열에 접근이 가능하다는것을 알 수 있었다.

 

*(pNums + 0) == nums[0]

*(pNums + 1) == nums[1]

*(pNums + 2) == nums[2]

※ pNums : 포인터 변수, nums : int형 자료형 배열

 

 

 

3. 포인터 배열

포인터 배열은 말 그래도 주소를 담고 있는 포인터들의 배열이다. 코드를 통해 포인터 배열에 대해 알아보자.

 

#include <stdio.h>
 
int main(void) {
 
    int a = 2;
    int b = 5;
    int c = 7;
 
    int* pNums[3] = { &a, &b, &c };
 
    printf("&a = %x\n", &a);
    printf("pNums[0] =  %x\n", pNums[0]);
    printf("*pNums[0] =  %d\n\n", *pNums[0]);
    
    printf("&b = %x\n", &b);
    printf("pNums[1] =  %x\n", pNums[1]);
    printf("*pNums[1] =  %d\n\n", *pNums[1]);
    
    printf("&c = %x\n", &c);
    printf("pNums[2] =  %x\n", pNums[2]);
    printf("*pNums[2] =  %d\n\n", *pNums[2]);
 
    return 0;
}
​

 

 

 

 

4. 포인터를 이용한 문자와 문자열

포인터를 이용하면 문자와 문자열에 쉽게 접근 할 수 있다. 사실 문자는 위에서 살펴본 예제와 다를게 없다.

문자열의 경우는 조금 특이한 부분이 있다. 포인터 변수는 주소를 담는 변수라고 했지만, 포인터 변수를 이용해서 문자열을 담을 수 있고 또 문자열에 접근 할 수 도 있다.

 

#include <stdio.h>
 
int main(void) {
 
    char* str = "hello";
    
    printf("str = %x\n", str);
    printf("*str = %c\n", *str);
    printf("str + 1 = %x\n", str + 1);
    printf("*(str + 1) = %c\n", *(str + 1));
    printf("str + 2 = %x\n", str + 2);
    printf("*(str + 2) = %c\n", *(str + 2));
    printf("str + 3 = %x\n", str + 3);
    printf("*(str + 3) = %c\n", *(str + 3));
    printf("str + 4 = %x\n", str + 4);
    printf("*(str + 4) = %c\n", *(str + 4));
    printf("str + 5 = %x\n", str + 5);
    printf("*(str + 5) = %c\n\n", *(str + 5));
 
    printf("서식문자 %%s를 사용했을때...\n");
    printf("str = %s\n", str);
    printf("str + 1 = %s\n", str + 1);
    printf("str + 2 = %s\n", str + 2);
    printf("str + 3 = %s\n", str + 3);
    printf("str + 4 = %s\n", str + 4);
    printf("str + 5 = %s\n", str + 5);
 
    return 0;
}
​

 

 

서식문자 %c를 이용할때는 *을 이용해서 값을 가져와야 하지만, %s를 이용하면 바로 데이터 값을 가져올 수 있다.

그리고 맨 마지막(str + 5)에는 문자열의 끝이라는것을 알려주기 위해 비어있는 공백의 값이 들어가게 된다.

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기