신규 블로그를 만들었습니다!
1. 포인터 변수를 인자로 갖는 함수
함수를 호출할떄 주소를 이용해서 호출을 할 수 있다.
일반적인 함수
// 함수 생성
int func(int num1, int num2){
// 내용
return x;
}
// 함수 호출
int a = 5;
int b = 10;
result = func(a, b);
#include <stdio.h>
int func(int num);
int main(void) {
// 일반 함수의 경우
int num1 = 10;
int result = func(num1);
// num1의 값은 변하지 않는다.
printf("num1 = %d\n", num1);
printf("result = %d\n\n", result);
return 0;
}
int func(int num) {
num = num + 100;
return num;
}
인자의 값으로 주소가 들어가는 함수도 있다.
// 함수 생성
int func(int* num1, int* num2){
// 내용
return x;
}
// 함수 호출
int a = 5;
int b = 10;
result = func(&a, &b);
#include <stdio.h>
int func(int* num);
int main(void) {
// 포인터를 이용한 함수의 경우
int num1 = 10;
int result = func(&num1);
// num1의 값이 변하는 것을 알 수 있다.
printf("num1 = %d\n", num1);
printf("result = %d\n\n", result);
return 0;
}
int func(int* num) {
// 메모리주소를 이용해서 접근하므로..
// num의 데이터 값에 직접적으로 영향을 준다.
*num = *num + 100;
return *num;
}
그렇다면 왜 이러한 방법을 사용할까?
포인터의 개념을 이해하고 있다면 2개의 차이가 존재하는 것을 알 수 있다.
결론부터 얘기 하면, 일반 함수의 경우는 int a, int b의 값에 영향을 주지 않는다.
하지만 포인터 변수를 갖는 함수는 int a, int b의 데이터 값에 영향을 준다는 것을 알 수 있다.
2. 함수에서의 포인터변수를 이용한 배열 접근방법
#include <stdio.h>
void func(int* pointer, int num);
int main(void) {
int nums[5] = {10, 3, 5, 8, 100};
func(nums, 5);
return 0;
}
void func(int* pointer, int num) {
for (int i = 0; i<num; i++) {
printf("pointer + %d = %x\n", i, pointer + i);
printf("pointer[%d] = %d\n", i, pointer[i]);
}
}
3. 주소를 반환하는 함수
지역변수의 주소를 반환하는 함수의 경우에는 static을 이용해서 선언해줘야 한다.
지역변수는 { ... } 중괄호 안에서만 존재하는 값으로
중괄호안의 내용을 모두 수행한뒤에는 지역변수는 소멸 될 수도 있다.
불안정한 상태에 존재하게 되므로 static 을 이용해서 값을 안정적이게 해준다.
즉, static이라는 메모리 공간을 이용해서 변수가 소멸되지 않게 해준다.
3-1. static을 사용하지 않은 경우
#include <stdio.h>
int* func();
int main(void) {
int* pTemp = NULL;
pTemp = func();
printf("pTemp = %x\n", pTemp);
printf("&pTemp = %x\n", &pTemp);
// 알수 없는 이상한 값이 나온다.
printf("*pTemp = %d\n", *pTemp);
return 0;
}
int* func() {
int num = 10;
return #
}
3-2. static을 사용한 경우
#include <stdio.h>
int* func();
int main(void) {
int* pTemp = NULL;
pTemp = func();
printf("pTemp = %x\n", pTemp);
printf("&pTemp = %x\n", &pTemp);
printf("*pTemp = %d\n", *pTemp); // 10
return 0;
}
int* func() {
// static을 사용해서 선언
static int num = 10;
return #
}
'Language > C&C++' 카테고리의 다른 글
C언어 :: 구조체와 배열, 구조체와 포인터 (-> 사용법) #17 (0) | 2018.02.07 |
---|---|
C언어 :: 구조체 (Struct), 중첩 구조체 #16 (0) | 2018.02.07 |
C언어 :: 포인터와 배열, 포인터를 이용한 문자열 #14 (0) | 2018.02.06 |
C언어 :: 포인터란(Pointer), 포인터 변수의 선언과 초기화 #13 (0) | 2018.02.05 |
C언어 :: 배열이란(Array), 선언과 초기화 #12 (0) | 2018.02.05 |
최근댓글