int argc, char *argv[] (main 함수의 매개변수) argc는 전달받은 문자열의 수, argv[]는 전달받은 문자열들로 이루어진 배열이다. int main(int argc, char* argv[]) { int i=0; printf("전달받은 문자열의 수: %d\n",argc); for(i = 0; i < argc; i++) printf("%d번째 문자열 %s\n",i+1,argv[i]); getchar(); return 0; } 카테고리 없음 2019.05.09
rand, srand (랜덤 함수) rand - 특정 범위 안에서 난수를 발생시키고 싶은 경우 - 0 ~ RAND_MAX 범위 중 하나의 수를 랜덤하게 반환 - stdlib.h 포함 필요 1. 사용법 예를 들어, 1~3중 난수를 발생시키고 싶다면 rand()%3+1; 2. 설명 stdlib.h에 정의되어 있는 RAND_MAX는 시스템에 따라 다르며 보통 32767 이다. 나머지 연산자를 이용하면 0 - 32767사이에 발생시키는 함수에서 1-100 사이의 난수를 발생시킬수 있다. 발생한 난수를 100으로 나누면 0-99 사이의 값이 되고, 여기에 1을 더하면 1-100사 이의 난수가 된다. 간단히 공식화 해보면, rand() %(종료값-시작값+1) + 시작값 srand - 매번 다른 난수를 발생시키고 싶은 경우 - stdlib.h 포함 필.. 카테고리 없음 2019.05.09
float vs double float의 크기는 4byte이고, double은 8byte이다. 그만큼 둘은 소수점 이하 정밀도에서 차이가 나는데, float는 소수점 이하 6자리고 double은 15자리이다. 이 자리를 넘어가면 부동소수점 오차가 발생한다. 그래서 사람들은 왠만하면 double을 쓰는 것을 추천한다. 카테고리 없음 2019.05.09
new ,delete (메모리 동적 할당) 일반적으로 변수를 선언할 때 사용하는 정적할당은 변수를 저장을 위한 메모리가 프로그램 실행 전에 미리 할당되는 것이다. 반면에 동적할당은 프로그램 실행 중에 필요한 만큼의 메모리를 요청한다. 선언 자료형* 포인터변수 = new 자료형 int* iptr = new int; 해제 delete 포인터변수 delete iptr; 동적할당으로 확보한 메모리는 더이상 사용하지 않는다면 해제해준다. 정적으로 할당된 변수들은 컴퓨터 기억장소중 스택(Stack)에 할당되는 반면, 동작할당은 힙(Heap)에 할당되는데, 힙에 할당 된 메모리를 해제하지 않으면 프로그램이 종료될 때까지 지속되어 메모리 누수가 발생한다. int* pi = new int; *pi = 100; cout 카테고리 없음 2019.05.09
malloc, free (메모리 동적 할당) malloc, free 지역변수는 함수를 빠져나가면 소멸되고, 전역변수는 계속 처음부터 끝까지 계속 남아있지만 변수를 동적으로 생성하면 사용자가 임의로 메모리를 할당, 해제 할 수 있다. * stdlib.h을 포함해야 한다 void* malloc(size_t size); // size 크기만큼 heap에 메모리 할당. 성공 시 할당한 메모리의 주소 반환, 실패 시 NULL 반환 void free(void* ptr); // 해제 // ex int* ptr = (int*)malloc(sizeof(int)); // void형 포인터는 값을 담기만 하므로 자료형 변환을 시킨다음 쓴다 calloc malloc과 비슷하나 전달방식에 차이가 있다 (메모리 공간을 0으로 초기화 한다는 특징도 있다) void* call.. 카테고리 없음 2019.05.09
레퍼런스 변수 (&, 참조 변수) 참조변수란? 참조변수는 C++문법으로 이미 선언된 변수를 다른 이름으로 부르는 변수이다. 변수의 가명 혹은 변수가 이어져 있다고 생각하면 될 것 같다. 용도 참조 변수는 public과 private여부에 관계 없이 값 변경이 가능하다. 외부의 함수에서 private변수에 접근할 때 쓸 수 있다. int a = 100; int& b = a; // 반드시 선언과 동시에 초기화 시켜주어야 한다. 포인터와의 차이점 포인터와 유사하고 비슷한 용도로 쓰이지만 다음과 같은 차이점이 있다. 포인터 - 간접 접근을 통해 기억장소를 참조 (포인터 변수에 접근 → 포인트 변수가 가리키는 주소로 다시 접근) - NULL 가능 참조변수 - 직접 접근을 통해 기억장소를 참조 (다이렉트로 변수에 접근) - NULL 불가 (선언과 .. 카테고리 없음 2019.05.09
call-by-value / call-by-address / call-by-reference call-by-value 함수를 호출할 때 단순히 값을 전달하는 형태. (값의 복사) 값을 반환하지 않는 이상, 함수 안에서 파라미터로 받은 값에 변화가 일어나도 진짜 변수에 영향을 끼치지 않는다. void swap(int a,int b) { int temp = b; b = a; a = temp; }; void main() { int num1 = 10; int num2 = 20; swap(num1,num2); printf("num1:%d num2:%d\n",num1,num2); // 값이 바뀌지 않는다. } call-by-address 메모리의 접근에 사용되는 주소 값을 전달하는 형태 (포인터 사용) void swap(int* a, int* b) // 파라미터로 주소값을 받고, 함수 안에서는 주소가 가리.. 카테고리 없음 2019.05.09
자료형 % 변환문자 모음 %d : 10진수 정수형으로 출력 (int) %lf : 실수형으로 출력 (double) %f : 실수형으로 출력 (float) %e : 지수형으로 출력 %o : 8진수로 출력 %x : 16진수로 출력 %u : 부호없는 10진수로 출력 (unsigned) %g : 실수형으로 자동 출력 %p : 포인터의 주소를 출력 %c : 하나의 문자로 출력 문자형 (char) %s : 문자열을 출력 카테고리 없음 2019.05.09
include 표준 헤더와 사용자 정의 헤더 1. #include // 표준 헤더파일 2. #include "..." // 사용자가 정의한 헤더파일 (소스파일이 저장된 디렉터리에서 인클루드) 상대경로 1. #include "header.h" // 소스파일이 있는 디렉토리 2. #include "..\header\header.h" // 소스 파일이 있는 디렉토리의 한 단계 상위에 있는 header란 이름의 디렉토리 3. #include "..\..\abc\header.h" // 두 단계 상위에 있는 abc란 이름의 디렉토리 카테고리 없음 2019.05.09
#연산자, ##연산자 # 연산자 문자열 내에서의 매크로 매개변수를 치환해준다. 예를 들어, [ FUNC(나,천재) → 나는 천재다 ] 와 같은 매크로 함수를 만들고 싶다면.. #define FUNC(A,B) "A는 B다" --- (x, 'A는 B다'를 출력한다) #define FUNC(A,B) #A "는 " #B "다" --- (o) // 문자열을 나란히 선언하면 하나의 문자열로 간주함 char* str = "ABC" "DEF"; // char* str = "ABCDEF"; ## 연산자 이어 붙이기 학번 112290은 입학년도11 + 학과코드22 + 고유번호90 의 조합이다. 따로따로 있는 값들을 이어 붙여 하나의 학번으로 만들어 주려면? #define NUM(Y,S,P) YSP --- (x, 에러) #define NUM(Y.. 카테고리 없음 2019.05.09