20140402 (main 인자전달, stream)
32일차
---------------------------
main 함 수 로 인 자 전 달
---------------------------
- int main( int iNum, char * Cmd[] )
main함수 인자에 위의 인자 처럼 넣어주면
iNum에는 받은 명령어 갯수,
Cmd에는 그 명령어들이 각각 저장되어 있다.
ex) gcc -o main main.c
iNum 에는 4,
Cmd[0] : gcc
Cmd[1] : -o
Cmd[2] : main
Cmd[3] : main.c
이렇게 저장됨.
인자의 이름은 프로그래머 재량이지만 보통
int main(int argc, char * argv[])
로 많이 쓴다. argc ( ARGument Count ) argv ( ARGument Vector )
-------------------------
이중 포인터와 2차원 배열
-------------------------
- 이전에 한 번 했었는데 헷갈려서 다시 한 번 언급한다.
void test ( int ** ptr )
{ A }
int main()
{
int arr[5][3];
test( arr );
....
위의 소스처럼 썼었는데 warning!
이유는
char ** 와 char [][] 참조수준이 다름.
서로 데이터 타입이 달라서 그랬다.
2차배열은 이중포인터와 같은 것인지 착각했었다.
그래서 고치면
void test( int (* ptr)[3] ) { A } or void test( int ptr[][3] ) { A }
둘 다 동일한 선언이고 '배열 포인터'이다.
- int * whoA [4] // 포인터 배열
- int (* whoA)[4] // 배열을 가리키는 포인터
------------------
Stream 흐름
------------------
- ' >' Redirection. 출력 방향을 바꾼다.
- 표준입력 (키보드) : stdin, 0
- 표준출력 (모니터) : stdout, 1
- 표준에러 (모니터) : stderr, 2
ms-dos, linux에서는 0, 1, 2로 스트림으로 쓴다.
ex)
dir > a.txt dir 내용을 a.txt에 넣음
dir 1> a.txt dir 내용을 a.txt에 넣음
dir 2> a.txt dir 에러 내용을 a.txt에 넣음
- ' >> ' 이것도 redirection인데 ' > ' 와 다른 점은
> : 새로 쓰기
>> : 추가로 쓰기
- fprintf( Stream, format, ...);
printf 함수와 다르게 stream을 정해서 출력할 수 있다.