티스토리 뷰
* 매개변수 전달 방법
- Call by value
- Call by reference ---> 포인터
* 스택 프레임 그리는 방법 ---> 중요
-------------------------------------------------- 함수 응용1
* 재귀호출
- 재귀호출을 이용한 문자열 출력
- 재귀호출의 장/단점
* 문자/문자열 처리 함수
- 문자 처리 함수
- 문자열 처리 함수
- 유니코드 문자열
* 유틸리티 함수
- atoi, atol, atof
- time, localtime, ctime
- srand, rand
- system, exit
-------------------------------------------------- 함수 응용2
----------------------------------------------------------------------------------------------------------------
* 매개변수 전달 방법
----------------------------------------------------------------------------------------------------------------
main() 내의 함수
- main() : caller
- 내의 함수 : callee
- caller는 callee를 호출할때 '실인수'를 정의
- caller에게 반환하는 값은 또한 임시 결과이다
binding : caller와 callee로 묶임
----------------------------------------------------------------------------------------------------------------
call by reference
----------------------------------------------------------------------------------------------------------------
ex)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void TestFunc(int *pnParam)
{
*pnParam =10;
}
int main(void)
{
int nData=0;
TestFunc(&nData);
printf("%d\n",nData);
return 0;
}
-----------------------------
10
-----------------------------
ex)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 주소를 반환하는 사용자 정의 함수 선언
char* GetName(void)
{
char *pszName=NULL;
//메모리 동적 할당
pszName=(char*)calloc(32,sizeof(char));
printf("이름을 입력하세요 : ");
//동적 할당한 메모리에 사용자 입력 문자열 저장
gets_s(pszName, sizeof(char)*32);
return pszName;
}
int main(void)
{
char *pszName=NULL;
//이름이 저장된 동적 할당 메모리의 주소 반환
pszName=GetName();
printf("당신의 이름은 %s 입니다.\n", pszName);
//호출자 함수가메모리를 해제
free(pszName);
return 0;
}
-----------------------------
이름을 입력하세요 : 탐 크루즈
당신의 이름은 탐 크루즈 입니다.
-----------------------------
ex) Swap
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Swap(int *pLeft, int *pRight)
{
int nTmp = *pLeft;
*pLeft = *pRight;
*pRight = nTmp;
}
int main(void)
{
int a = 10, b = 20;
Swap(&a, &b);
printf("%d, %d\n", a,b);
return 0;
}
-----------------------------
20, 10
-----------------------------
----------------------------------------------------------------------------------------------------------------
잘못된 주소 전달
----------------------------------------------------------------------------------------------------------------
ex) 사라질 메모리의 주소를 반환하는 것
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int* TestFunc(void)
{
int nData = 10; // 지역/자동 변수 nData의 주소를 반환. 값이 나와도 잘못된 로직임!!
return &nData;
}
int main(void)
{
printf("%d\n", *TestFunc());
return 0;
}
----------------------------------------------------------------------------------------------------------------
스택 프레임 그리는 방법
----------------------------------------------------------------------------------------------------------------
- 함수 내부에 선언된 변수와 매개변수는 기본적으로 '스택'을 사용
- 스택과 메모리의 주소는 반대 방향으로 그린다
- 스택 메모리 공간
> 변수 선언시마다 쌓이는 구조
> cf. 스택에 넣기 : push, 스택에서 빼 읽기 : pop
> int a,b;
.. |
.. |
.. |
b |
a |
> a를 먼저 스택에 push 했다
'Test > C' 카테고리의 다른 글
전화번호부 v1.0 : 메모리에서만 동작하는 전화번호부 (0) | 2018.12.30 |
---|---|
함수 응용2 : 재귀함수, 문자/문자열처리함수, 유틸리티함수 (0) | 2018.12.26 |
메모리와 포인터6 : 변수와 메모리 (0) | 2018.12.23 |
메모리와 포인터6 : 다차원 배열에 대한 포인터 (0) | 2018.12.23 |
* 메모리와 포인터5 : 포인터의 배열과 다중 포인터 (0) | 2018.12.21 |
- Total
- Today
- Yesterday
- 대소문자
- exadata
- vmware
- sysprep
- 부동없이
- vmware.powercli
- storage
- cloud-init
- 3par
- EXA
- artandculture
- 변수화
- insert
- dp-2
- Join
- dezoomify
- powercli
- dp-1
- 읽어오기
- powershell
- 정렬
- LIST
- 배열
- 중복제거
- virt-sysprep
- 스토리지
- 차집합
- oracle
- set()
- fromkeys
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |