본문 바로가기
반응형

프로그래밍 언어/C 언어39

[C/C++] memmove() 함수 사용과 예제 함수 원형 void* memcpy (void* dest, const void* src, size_t num) • dest: 데이터가 복사될 곳 (void* 형) • src: 복사될 데이터가 위치하는 곳 (void* 형) • num: 복사할 크기 (byte 단위) → src 에 있는 영역에서 num 바이트 만큼 dest 영역으로 옮긴다. 중간에 버퍼를 이용하기 때문에 메모리를 옮길 때 dest 영역과 src 영역이 겹처도 문제가 없다. → dest 영역과 src 영역 크기는 num 이상이어야 한다. → 필요한 헤더 파일: 혹은 반환 값 dest (void* 형) 예제 (정수 배열 복사) #include #include int main() { int src[2][3] = { {1, 2, 3}, {4, 5, .. 2021. 11. 28.
[C/C++] memcpy 사용 방법 함수 원형 void *memcpy(void *dest, const void *src, size_t N); •dest: 데이터가 복사되는 영역 (To) •src: 복사할 원본 데이터 (From) •N : 복사할 크기 (Byte) → memcpy(복사 받는 메모리, 복사할 메모리, 크기); src 메모리 영역에서 dest 메모리 영역으로 N byte 만큼 복사 * 필요한 헤더파일: 혹은 반환 값 dest 포인터 (void* 형) 예제 (2차원 배열 복사) #include #include int src[][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int dest[3][3]; int main() { // 복사 전 for (int i = 0; i < 3; ++i) { for (in.. 2021. 11. 24.
[C/C++] do-while 문 형태와 활용 do-while문은 안에 있는 코드를 조건식과 상관없이 한 번 무조건 실행됩니다. 그 후에 조건식을 확인하고 반복 여부가 결정된다. 그렇기에 아래 코드는 i < 0 이지만 한 번 printf 가 실행되고 조건문에 걸려 반복문을 빠져나오게 된다. #include int main() { int i = 0; do { printf("안녕 세상아 [%d]\n", i); i++; } while (i < 0); } 중괄호 안에서 변화식을 조건문에 맞춰서 작성하지 않으면 반복이 끝나지 않고 무한 루프 되므로 주의! 위 코드를 while 문으로 변경한다면 아래와 같다. 물론 반복문 자체가 실행되기 위해서는 조건문 수정이 필요하다. 😒 #include int main() { int i = 0; printf("안녕 세상아 .. 2021. 11. 22.
[C] printf 서식 %d int 부호 있는 10진수 정수 %u unsigned int 부호 없는 10진수 정수 %o unsigned int 부호 없는 8진수 정수 %x, %X unsigned int 부호 없는 16진수 정수 %f float, double 10진수 방식의 부동소수점 실수 %e, %E float, double e 또는 E 방식의 부동소수점 실수 %g, %G float, double 값에 따라 %f와 %e 사이에서 선택 %c char 문자 %s char * 문자열 %p void * 포인터의 주소 값 %n int * 포인터의 주소 값 %lu unsigned long 부호없는 long %llu unsigned long long 부호없는 long Refernece - [BOJ] 1550 16진수 2021. 9. 14.
[C/C++] memset 사용시 주의사항 먼저 memset 함수의 기본적인 사용방법을 읽어보는 것을 추천드립니다. [C / C++] memset 함수 사용 memset 함수는 memory + set 으로 특정 메모리 공간에 지정한 값을 채워준다. 함수 원형 void* memset(void* ptr, int value, size_t num); → memset (시작 포인터, 설정할 값, 크기) ① void* ptr .. zoosso.tistory.com 예제 1 #include #include const int MAX_N = 2; int main() { int arr[MAX_N]; memset(arr, 1, sizeof(int) * MAX_N); for (int i = 0; i < MAX_N; i++) { printf("%d ", *(arr + .. 2021. 9. 11.
[C / C++] memset 함수 사용 memset 함수는 memory + set 으로 특정 메모리 공간에 지정한 값을 채워준다. 함수 원형 void* memset(void* ptr, int value, size_t num); → memset (시작 포인터, 설정할 값, 크기) ① void* ptr 메모리 시작 주소 ② int value 설정하고자 하는 값 int 타입으로 받지만 내부에서는 unsigned char (1 byte)로 변환 ③ size_t num 메모리 크기 (바이트 단위) 주로 sizeof() 를 활용한다. 반환 - 성공하면 첫번째 인자로 들어간 ptr 반환 - 실패하면 NULL 반환 헤더파일 (C) #include 혹은 #include (C++) #include 예시 [예제 1] #include #include const i.. 2021. 9. 11.
[C] typedef enum 활용 [C] 열거형 타입 enum 이란?을 먼저 읽고 오시는 것을 권장 드립니다. enum 타입은 typedef 키워드와 주로 함께 사용된다. typedef는 타입의 별칭을 생성하고 실제 타입 이름 대신 별칭을 사용할 수 있게 한다. #include typedef enum Season { SPRING, SUMMER, FALL, WINTER. }SEASON; int main(void) { SEASON birthday = FALL; printf("%d\n", birthday); } typedef로 명시적 타입을 사용하면서 버그와 에러를 줄일 수 있다. #include #include using namespace std; typedef enum Season { SPRING, SUMMER, FALL, WINTER, .. 2021. 9. 11.
[C] 로그(log) 함수 C / C++ 언어에서 비트연산이나 코딩 문제를 풀다보면 수학 관련 문제를 푸는 경우가 있다. C언어에서도 #include 로 밑이 다양한 로그함수를 제공한다. 함수 오버로딩(Overloading)이 안되기 때문에 매개변수 자료형에 따라 함수명을 결정해야 한다. 밑이 e 인 로그 함수 (자연 로그) - double log(double n); - float logf(float n); - long double logl(long double n); 밑이 10 인 로그 함수 (상용 로그) - double log10(double n); - float log10f(float n); - long double log10l(long double n); 밑이 2 인 로그 함수 - double log2(double n); .. 2021. 9. 1.
[C] 함수 포인터와 void 포인터 함수 포인터 변수 메모리상에 저장된 함수의 주소 값을 포인터 변수 변수뿐만 아니라 함수들도 바이너리 형태로 메모리 공간에 조장되어 호출 · 실행 배열의 이름과 마찬가지로 함수의 이름도 함수가 저장된 메모리 공간의 주소 값을 의미. 함수 이름의 포인터 형은 함수의 반환형과 매개변수의 선언을 통해서 결정짓도록 약속. int testFunc(int x){...} : 반환형(int) / 매개변수(int형 1개) ▷ int(*fptr)(int) = testFunc; void sampleFunc(int x, int y){...} : 반환형(void) / 매개변수(int형 2개) ▷ void(*fptr)(int, int) = sampleFunc; 함수 포인터는 특정한 함수의 반환 자료형을 지정하는 방식으로 선언 형태.. 2021. 3. 20.
[C] 포인터의 포인터(이중 포인터) 포인터의 포인터(이중 포인터) int ** dptr; // int형 이중 포인터 포인터 변수는 종류에 상관없이 무조건 주소 값을 저장하는 변수 이중 포인터 변수는 포인터 변수를 가리키는 대상에서 차이가 있습니다. double num = 3.14; double *ptr = &num; double **dptr = &ptr; double *ptr2 = *dptr; ptr과 ptr2와 동일한 대상을 가리키게 되었습니다. 잘못된 swap 예제 #include void swap(int* x, int* y) { int* temp = x; x = y; y = temp; } int main(void) { int a = 10, b = 20; int* p1, *p2; p1 = &a, p2 = &b; printf("%d %d.. 2021. 3. 20.
반응형