본문 바로가기

Other Programming/C C++

main 함수의 인수 - 출처 : winapi.co.kr main 함수의 인수 main도 일종의 함수이므로 인수를 가질 수 있고 리턴값도 가질 수 있다. main은 프로그램 실행 직후에 자동으로 호출된다는 점에 있어서 일반 함수와는 다른 특별한 면이 있으며 프로그램의 시작점이기 때문에 이름은 고정되어 있지만 함수의 원형은 고정적이지 않다. main 함수의 원형은 다소 복잡한데 다음과 같은 조합이 가능하다. void(또는 int) main(int argc,char *argv[],char *env[]); 리턴값은 int형이거나 void형 중 하나를 선택할 수 있으며 세 개의 인수를 가지는데 인수는 뒤쪽부터 차례대로 생략 가능하다. 그래서 main 함수의 가능한 원형은 다음 여덟가지나 된다. ① void main(void); ② void main(int argc);.. 더보기
이중 포인터 출처 : winapi.co.kr #include void main() { int i; int *pi; int **ppi; i=1234; pi=&i; ppi=π printf("%d\n", **ppi); } #include void InputName(char **pName); void main() { char *Name; InputName(&Name); printf("이름은 %s입니다. \n", Name); free(Name); } void InputName(char **pName) { *pName = (char *) malloc(12); strcpy(*pName, "Cablin"); } . #include // 잘못된 죽은 코드임 ㅋㅋ void InputName (char *pName); void main.. 더보기
메모리 할당 및 해제 / 재 할당 출처 : winapi.co.kr void *malloc(size_t size ); void free(void *memblock ); 먼저 malloc(엠얼록이라고 읽는다) 함수부터 알아보자. 인수로 필요한 메모리양을 바이트 단위로 전달하면 요청한만큼 할당한다. size_t는 메모리의 양을 나타내는 단위인데 _t로 끝나는 사용자 정의 타입은 표준에 의해 반드시 정의하도록 되어 있으므로 기본 타입과 거의 대등한 자격을 가진다. 플랫폼에 따라 다르게 정의되어 있는데 대부분의 32비트 컴파일러들은 size_t를 unsigned의 부호없는 정수형으로 정의한다. 따라서 이 함수로 할당할 수 있는 이론적 최대 용량은 4G 바이트라고 할 수 있다. 10바이트가 필요하면 malloc(10)이라고 호출하고 1000바이트가.. 더보기
[C] void 포인터 / NULL 포인터 #include void main() { int i=1234; void *vp; vp=&i; //printf("%d\n",*vp); printf("%d\n",(int *)vp); printf("%d\n",*(int *)vp); if (func()==NULL) { // 에러 처리 } else { // 하고 싶은 일 } } 더보기
[C] C는 포인터에 대한 증감 연산을 산술 연산과는 달리 아주 특수하게 수행한다. /포인터 연산 예 제 : PointerType2 #include void main() { int ar[]={1,2,3,4,5}; int *pi; pi=ar; printf("첫 번째 요소 = %d\n",*pi); pi++; printf("두 번째 요소 = %d\n",*pi); } 크기 5의 ar 배열을 정의했으며 pi=ar 대입문으로 pi가 ar 배열의 선두 번지를 가리키도록 했다. 배열명 자체는 배열의 시작번지를 가리키는 포인터 상수이므로 pi가 이 포인터 상수를 대입받을 수 있다. pi=&ar이 아니며 이렇게 대입해봐야 대입되지도 않음을 주의하도록 하자. pi가 ar 배열의 시작 번지, 그러니까 ar[0]의 번지를 가리키고 있는 상황이다. 이 상태에서 *pi를 읽으면 pi 위치에서 4바이트를 읽을 것이며 이 값을 출.. 더보기
[C] AlphaNum 문제 winapi.co.kr 문제 AlphaNum 영문 소문자로 구성된 긴 문장을 입력받아 이 문자열 내의 각 알파벳 문자 개수를 구해 출력하라. 예를 들어 alpha가 입력되었다면 a:2, b:0, .... h:1, ... l:1, .... p:1이 출력되어야 한다. 각 문자의 출현 회수를 저장할 배열이 필요하다. #include void main() { char alphabat[26] = { 'a','b','c','d','e','f','g','h','i','j','k','l', 'm','n','o','p','q','r','s','t','u','v','w','x','y','z' }; char input[100]; int totalCount = 0; scanf("%s", input); int k = sizeo.. 더보기
[C] 배열명이 단독으로 사용되면 배열의 시작번지값을 가지는 포인터 상수이다. /배열명이 그 자체로 포인터이므로 scanf의 인수로 넘길 때 &연산자를 붙이지 않는다 배열명이 단독으로 사용되면 배열의 시작번지값을 가지는 포인터 상수이다. 이 문장이 선뜻 이해가 가지 않겠지만 배열의 본질을 이해하는 아주 핵심적인 문장이므로 음절 하나 틀리지 않고 그대로 외워야 할 정도로 중요하다. 배열명이 단독으로 사용된다는 말은 첨자없이 배열의 이름만 적는다는 뜻이다. ar[0], ar[1]과 같이 첨자와 함께 쓰면 배열 요소 변수지만 ar과 같이 배열명만 쓰면 이 값은 배열의 시작번지를 가리키는 포인터값이 된다. 배열명이 포인터라는 것을 확인해 보기 위해 다음 문장을 실행해 보자. #include void main() { char str[6] = {'K', 'o', 'r', 'e', 'a'}; printf("%s\n",str); printf("%c\n",str[2]); } 크기 6.. 더보기
[C] 배열을 정의 할때 sizeof 연산자를 사용하면 유지보수가 쉬워진다 #include void main() { int arScore[5]; int i; int sum; for (i=0;i 더보기