Study/C
포인터 [part1]
MWP
2017. 1. 17. 16:04
1. 함수의 인자로 배열 전달
#include <stdio.h> /* 함수의 인자로 배열 전달*/ void func(int *arr, int len) { // 매개변수로 배열의 포인터를 받음 // int arr[] 로도 선언가능 for (int i = 0; i < len; i++) { arr[i] = 100; // == *(arr+i) // 메모리 주소값을 가르키는 포인터이므로 값 변경 가능 } for (int i = 0; i < len; i++) { printf("arr[%d] : %d \n", i, *(arr + i)); } } void main() { int arr[] = { 1,2,3,4,5 }; int len = sizeof(arr) / sizeof(int); // main 내에서는 sizeof(arr) 이 20 이지만 // 매개변수로 전달된 포인터 arr 은 사이즈가 4이므로 // 길이 정보를 같이 전달해야함 func(arr,len); } |
2. Call by Reference 를 이용한 Swap
#include <stdio.h> /* Call by Reference Swap */ void swap(int *n1, int *n2) { // 메모리 주소를 통해 접근해 n1과 n2 의 실제값을 서로 swap int temp = *n1; // n1의 값을 temp 변수에 임시 저장 *n1 = *n2; // n1 의 값을 n2 의 값으로 변경 *n2 = temp; // temp 에 임시로 저장한 n1 의 값을 n2 에 저장 } void main() { int n1 = 1; int n2 = 5; printf("n1= %d n2= %d \n", n1, n2); swap(&n1, &n2); // n1 과 n2 의 값을 바꿈 printf("n1= %d n2= %d \n", n1, n2); } |
2. 포인터 대상의 const 선언
#include <stdio.h> /* 포인터 대상의 const 선언 */ void main() { int num = 20; const int *ptr = # // ptr을 참조해 값을 변경하는것을 허용하지않는다 int const *ptr2 = # // ptr2가 참조하는 주소값을 변경하는것을 허용하지 않는다 } |