일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 다음메일
- 200-301
- 한국판뉴딜
- 정보처리기사
- ads.txt
- 스마트시티
- QA
- 韓国ヒップホップ
- 스펙정보
- DevNet
- 동시접속
- gbd-200
- 코로나바이러스
- 사용자100명
- JMeter
- certification
- 환경정보
- 5G
- 부자아빠가난한아빠
- 韓国
- 명령어
- 사양
- 사양정보
- 일본유학
- ios
- move앱
- 4차산업
- 리눅스
- 성능측정
- 일본대학원
Archives
- Today
- Total
IT 컴퓨터공학 자료실
초급편 6. 함수 호출 방법 본문
포인터 토대가 된 책
함수 호출 방법
함수 호출에는 두 가지 방법이있다. "값 전달"며 "참조 전달"이다. 하청 함수에 인자로 변수 값을 전달하거나 변수의 주소를 전달 함수의 내부에서 간접 참조 하느냐에 따라 구별되고있다. C 언어의 기본 함수 호출은 "값 전달"하지만 쉽게 "참조 전달"할 수있다. 참조로 전달하기 위해 포인터를 인자로 넘기면된다. 문자열이나 배열을 하청 함수에 전달하려면 기본적으로 참조로 전달된다.
void sub1 (char * s) / * 문자열의 참조로 전달 * / { ......... } void sub2 (int * a) / * 배열의 참조로 전달 * / { ......... } void sub3 (int x) / * 일반 값 전달 * / { x = x + 1; } void sub4 (int * x) / * 변수의 참조로 전달 * / { * x = * x + 1; / * (* x) +; 같은 * / } void main () { char str [] = { "text"}; int array [4] = {1, 2, 3, 4}; int x = 10; sub1 (str); sub2 (array); sub3 (x); sub4 (& x); }
하청 함수 내에서 값을 변경했을 때 위의 함수에서 그 변수의 값이 변경되는지 여부라는 점에서 값 전달의 경우 변경되지 않지만, 참조로 변경되는 것에주의.
연산자 우선 순위에 대한 관심. 증가 (++) / 감소 (- -) 연산자와 간접 참조 연산자 (*)의 우선 순위는 간접 참조가 더 낮다. 그래서,
while (1) { sub (* + p); }
이라는 코드는 빈출하지만 단일 문장
* + p;
간접 참조의 문장이 무의미하다. (포인터 p 증가 한 후 포인터가 나타내는 값을 참조하고 값을 버린다) 이것을 유사 어셈블리로 작성하면
MOV AX, [p의 주소 ADD AX 1 MOV BX, AX]
그리고, 결국 BX 레지스터의 값을 사용하지 않는 것이다.
참조에 의한 전달 함수 내부에서 증가 연산자를 사용하기 위해서는,
+ (* p);
할 필요가있다. 이것을 유사 어셈블리로 작성하면
MOV AX, [p의 주소 MOV BX, AX] ADD BX 1 MOV [p의 주소, BX
되고, 포인터가 가리키는 주소의 값이 가산된다.
'컴퓨터공학 > 포인터' 카테고리의 다른 글
초급편 8. 리스트 구조 (0) | 2015.06.30 |
---|---|
초급편 7. 구조체와 포인터 (0) | 2015.06.30 |
초급편 5. 포인터의 형태 (0) | 2015.06.30 |
초급편 4. 주소 가져오기 (0) | 2015.06.30 |
초급편 3. 문자열 처리 (0) | 2015.06.30 |