본문 바로가기

programming language

(45)
열혈 ( C ) chapter 23 정리노트 1 typedef 선언 typedef 선언은 기존에 존재하는 자료형의 이름에 새 이름을 부여하는 것을 목적으로 하는 선언이다. #include typedef int INT; typedef int* PTR_INT; typedef unsigned int UINT; typedef unsigned int* PTR_UINT; typedef unsigned char UCHAR; typedef unsigned char* PTR_UCHAR; int main(void) { INT num1 = 120; PTR_INT pnum1 = &num1; UINT num2 = 190; PTR_UINT pnum2 = &num2; UCHAR ch = 'z'; PTR_UCHAR pch = &ch; printf("%d, %u, %c \n", *..
열혈 ( C ) chapter 22 - 구조체와 배열 그리고 포인터 #include struct point { int xpos; int ypos; }; int main(void) { struct point arr[3]; int i; for (i = 0; i < 3; i++) { printf("점의 좌표 입력: "); scanf("%d %d", &arr[i].xpos, &arr[i].ypos); } for (i = 0; i < 3; i++) printf("[%d,%d] ", arr[i].xpos, arr[i].ypos); return 0; } point라는 이름의 구조체를 정의하였고, 이때 point라는 이름이 int나 double과 같은 자료형의 이름이 된다. 즉 사용자 정의 자료형이라 부를 수 있다. int xpos; int ypos; 를 구조체의 멤버라고 부른다. 다..
열혈 ( c ) chapter 22-구조체의 정의 #include #include struct point { int xpos; int ypos; }; int calculate(int A, int B,int C,int D) { return sqrt((A - B) * (A - B) + (C - D) * (C - D)); } int main(void) { struct point pos1, pos2; double distance; fputs("point1 pos: ", stdout); scanf("%d %d", &pos1.xpos, &pos1.ypos); fputs("point2 pos: ", stdout); scanf("%d %d", &pos2.xpos, &pos2.ypos); distance = calculate(pos1.xpos, pos2.xpos, po..
열혈 ( C ) chapter 21 정리노트 5 문자열을 덧붙이는 함수들: strcat, strncat #include #include int main(void) { char str1[20] = "First~"; char str2[20] = "Second"; char str3[20] = "Simple num: "; char str4[20] = "1234567890"; //case1 strcat(str1, str2); puts(str1); //case strncat(str3, str4, 7); puts(str3); return 0; } strcat 함수 호출 시 str2의 문자열이 str1의 문자열 뒤에 덧붙여지는데, 덧붙임이 시작되는 위치는 str1의 널문자 다음이 아니라 널문자가 저장된 위치에서부터 이다. 이렇게 널문자가 저장된 위치에서부터 복사가 ..
열혈 ( C ) chapter 21 정리노트 4 chapter 21 -4 출력 버퍼를 비우는 fflush 함수 #include int fflush(FILE * stream); 위의 함수는 인자로 전달된 스트림의 버퍼를 비우는 기능을 제공한다. 출력버퍼가 비워진다는 것은 출력버퍼에 저장된 데이터가 버퍼를 떠나서 목적지로 이동되는 것을 뜻한다. fflush(stdout); // 표준 출력버퍼를 비워라 어떠한 시스템의 어떠한 표준 출력버퍼라 할지라도 버퍼에 저장된 내용이 비워지면서 데이터가 목적지로 이동한다고 한다. 추가적으로 위 함수의 인자로 파일의 스트림정보가 전달되면, 해당 버퍼에 저장되어 있던 데이터들이 버퍼를 떠나서 파일에 기록된다. 입력 버퍼의 비워짐 #include void ClearLineFromBuffer(void) { while (getc..
열혈 ( C ) chapter 21 정리노트 3 chapter21 - 3 문자열 입력 함수: gets, fgets #include char * gets(char * s); char * fgets(char * s,int n,FILE * stream); gets함수를 사용하면 문장 구성은 간단하지만, 미리 마련해 놓은 배열을 넘어서는 길이의 문자열이 입력되면, 할당받지 않은 메모리 공간을 침범하여 실행 중 오류가 발생한다는 단점이 있다. 그래서 가급적으로 fgets함수를 호출하는 것이 좋다고 한다. int main(void) { char str[7]; fgets(str,sizeof(str),stdin); ...................... } 위 코드가 의미하는 바는 stdin으로 부터 문자열을 입력받아서 배열 str에 저장하되, sizeof(str..
열혈 ( C ) chapter 21 정리노트 2 chapter21-3 문자열 출력 함수: puts, fputs #include int puts(const char * s); int fputs(const char*s,FILE * stream); puts 함수는 출력의 대상이 stdout으로 결정되어 있지만, fputs 함수는 두 번째 인자를 통해서 출력의 대상을 결정할 수 있다. 그리고 둘 다 첫 번째 인자로 전달되는 주소 값의 문자열을 출력을 한다. #include int main(void) { char* str = "Simple String"; printf("1.puts Test ------\n"); puts(str); puts("So simple String"); printf("2.fputs Test ------\n"); fputs(str, std..
상수 형태의 문자열을 가리키는 포인터 마지막에 널 문자가 삽입되는 문자열의 선언방식 1. 배열을 이용하는 방식. 2.char형 포인터 변수를 이용하는 방식. 배열을 기반으로 하는 문자열의 선언 char arr[ ] = "I love"; 이는 배열을 기반으로 하는 '변수 형태의 문자열' 선언이다. 변수라 하는 이유는 문자열의 일부를 변경할 수 있기 때문이다. 포인터를 기반으로 하는 문자열 선언 char * arr2 = "my house"; 위와 같이 선언을 하면, 문자열 "my house"가 메모리 공간에 저장되고, 문자열의 첫번째 문자 m의 주소값이 반환된다. 그리고 그 반환값은 포인터 변수 arr2에 저장된다. 둘의 차이: 배열이름 arr은 계속해서 문자 I가 저장된 위치를 가리키는 상태여야 하지만, 포인터 변수 arr2는 다른 위치를 가..