PL/C++10 malloc 기본적인 사용법 malloc 기본적인 사용법 이건 왜 외워지지가 않냐.. 함수 원형 #include void* malloc(size_t size); 성공 시 할당한 메모리의 첫 번쨰 주소 리턴, 실패시 null 리턴 사이즈를 넣어줘야하므로 int배열이라면 sizeof(int)*길이 를 하면 된다. void* 리턴이라서, char* 배열이면 캐스팅을 명시적으로 해주어야한다. 쓰고 난 뒤 free 꼭 해줘야한다. 마찬가지로 에 있고, free(ptr) 넣어주면 된다. PL/C++ 2022. 7. 22. 문자와 숫자 간 변환법(char to int, int to char) 문자와 숫자 간 변환법(char to int, int to char) int to char int형을 char배열에다가 넣으려면? sprintf()를 이용하면 된다 int num = 3; char str[15]; sprintf(str, "%d", num); char* to int 에 있는 atoi() 함수를 이용하면 된다. 자매품 atof(char to double), atol(char to long int)도 있다. 사용법 char str[10] = "123"; int num = atoi(str); 하지만, char* 형을 int로 바꾸는 것임에 유의해야 한다. 만약 str[10] 배열 안의 수 123이 1,2,3이고 이를 숫자로 바꾸려면? char*을 만들어줘도 된다. char* arr; arr = .. PL/C++ 2022. 7. 22. floor, ceiling 등 함수를 쓰지 않고 반올림 간단하게 구현하기 floor, ceiling 등 함수를 쓰지 않고 반올림 간단하게 구현하기 반올림 구현하기 floor 같은 함수를 써도 되지만, int형 캐스팅을 이용해 간단하게 구현할 수 있다. int res = (double)sum / n + 0.5; 양수값의 경우 +0.5하고 인트 캐스팅 음수값의 경우 -0.5하고 인트 캐스팅 PL/C++ 2022. 7. 22. call by value, address, reference 차이점 정리 call by value, address, reference 차이점 정리 Call by Value (값 호출) 함수에 인자를 넘겨줄 때, 변수의 값을 넘겨준다. #include void swap(int a, int b) { int tmp; tmp = a; a = b; b = tmp; printf("In func: a=%d, b=%d\n", a, b); } int main() { int a=1; int b=2; printf("main: a=%d, b=%d\n", a, b); swap(a, b); printf("After func: a=%d, b=%d\n", a, b); } 실행시켜보면, 함수를 빠져나왔을 때 값이 변하지 않았음을 확인할 수 있다. 즉 주소를 전달한 게 아니라 값만 함수에 전달했기 때문에 함.. PL/C++ 2022. 7. 19. lvalue와 rvalue의 이해, 증감연산자와 앰퍼센드 연산자 lvalue와 rvalue의 이해, 증감연산자와 앰퍼센드 연산자 l-value와 r-value left value와 right value를 의미하며, int a = 3; 같은 식에서 왼쪽의 a가 l-value, 오른쪽이 r-value이다. 즉 l-value: 식 이후에도 남아있는 값. 주소를 가지고있음. r-value: 메모리 주소가 없고, 표현식 범위에만 있는 임시 값. 임시 변수! 예를들면 if(a PL/C++ 2022. 7. 19. STL sort 함수 사용법 헤더를 인클루드 해야한다. C++ STL에서 제공한다. O(NlogN) 시간 복잡도를 가진다. 퀵정렬은 피봇을 어떻게 잡느냐에 따라 최악의경우 O(N^2)의 시간 복잡도를 가지지만 sort 함수의 알고리즘은 최악의 경우에도 O(NLogN)을 보장하는 intro sort로 구현되어있다. 사용법 sort(배열 시작주소, 배열 끝주소+1); 로 사용한다. 즉, 배열의 원소가 n이라면 sort(arr, arr+n)으로 사용하면 된다. 아래는 사용 코드 예시 #include #include #include using namespace std; int main() { int len = 5; int arr[len] = {1,3,5,2,4}; sort(arr, arr+len); for(int i=0;i PL/C++ 2022. 7. 19. scanf 사용시 버퍼에 남은 linefeed 처리 scanf 사용시 버퍼에 남은 linefeed 처리 3 a 위와 같은 인풋을 아래의 scanf로 받는다고 하자. scanf("%d", &num); scanf("%c", &ch); 결과는 str에 a 캐릭터가 들어가지 않고 빈 문자열이 들어간다. scanf가 3을 받고나서 버퍼에 \n가 남아있는 상태가 되고, 두번째 scanf가 \n을 받고 끝내버리기 때문이다. 이를 방지하기 위해서는 캐릭터를 입력받는 scanf의 포맷스트링 앞에 ' ' 공백을 추가해주면 된다. scanf(" %c", &ch); 버퍼 앞의 공백, \n, \t가 모두 무시된다. PL/C++ 2022. 7. 14. 우분투에서 scanf()로 EOF 입력하기/받기 우분투에서 scanf()로 EOF 입력하기/받기 scanf() 함수로 EOF 받기 입력값의 길이를 모르고 형식만 알 때, 예를 들어 아래와 같이 정수 3개가 공백 간격으로 t번 반복된다고 하자. 1 2 3 3 4 5 ... 3 3 2 t번을 알 수 없을 때, scanf를 while문 안에 넣어 EOF를 탐지할 수 있다. while(scanf("%d %d %d", &a, &b, &c)!=EOF) { // 대충 a, b, c로 무언가 하는 코드 } 우분투 콘솔에서 EOF 입력넣기 Ctrl+d를 두 번 입력해주어야 한다. tmux 사용 시에는 shell exit을 일으킬 수 있다. PL/C++ 2022. 6. 29. 포인터변수의 이해와 주소연산자 포인터변수의 이해와 주소연산자 엠퍼센드 연산자의 용례 엠퍼센드 연산자는 아래의 3가지로 쓰인다. & bitwise and 연산자로서 사용 주소연산자로 사용 int* ptr = &b; (주소를 리턴하는 연산자) 레퍼런스변수로서 사용 이중 두 번째 주소연산자로서 사용하는 경우를 알아보자. 포인터와 &의 사용 포인터는 주소값을 저장하는 변수고, &는 주소값을 리턴하는 연산자다. #include int main() { int val = 10; int* ptr; ptr = &val; // 포인터는 주소값을 저장하는 변수 } 포인터 변수를 선언할 때 int*등을 쓰는데, 이때의 int는 변수의 자료형이 int라는 뜻이 아니라, 포인터 변수의 주소가 가리키는 값이 해당 자료형이다라는 뜻. PL/C++ 2022. 6. 28. 배열과 포인터의 공통점과 차이점 배열과 포인터 배열과 포인터는 표현에서 비슷한 점이 많다. 배열 표현식과 포인터 표현식을 interchangably 쓸 수 있다. #include int main() { int val = 10; int* ptr; int arr[3] = {1,2,3}; ptr = &val; // arr = &val; // 얘는 안된다. arr변수는 '배열'로 선언되었기 때문. // 한번 세팅하면 주소값을 바꿀 수 없는 const pointer와 비슷한 느낌? printf("ptr value: %x\n", ptr); // 주소값 printf("ptr pointer: %d\n\n", *ptr); // 10 printf("ptr[0]: %d\n", ptr[0]); // 포인터를 배열처럼 printf("*(arr+.. PL/C++ 2022. 6. 28. 이전 1 다음