신규 블로그를 만들었습니다!
포인터와 배열은 밀접한 관계가 있다.
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)에는 문자열의 끝이라는것을 알려주기 위해 비어있는 공백의 값이 들어가게 된다.
'Language > C&C++' 카테고리의 다른 글
C언어 :: 구조체 (Struct), 중첩 구조체 #16 (0) | 2018.02.07 |
---|---|
C언어 :: 포인터와 함수, static #15 (0) | 2018.02.06 |
C언어 :: 포인터란(Pointer), 포인터 변수의 선언과 초기화 #13 (0) | 2018.02.05 |
C언어 :: 배열이란(Array), 선언과 초기화 #12 (0) | 2018.02.05 |
C언어 :: 함수(function, method)와 사용법 #11 (0) | 2018.01.30 |
최근댓글