[C언어] 함수 포인터 개념과 활용
·
C
개인적으로 C언어의 꽃이라고 생각되는 함수 포인터 개념을 이번 포스팅에서 다뤄보려고 합니다. 1. 함수 포인터란?일반적으로 포인터란 자기 자신 이외의 메모리 주소를 담는 변수라고 표현됩니다.이와 비슷하게 함수 포인터는 함수의 주소를 담는 변수라고 표현됩니다. 함수 포인터 또한 결국 포인터이기에 변수뿐만 아니라 함수 인자로도 사용할 수 있죠우선 생김새를 배워봅시다.[함수 반환형*] (*변수명)(인자)ex) void* (*print)(char*);일반 변수처럼 똑같이 자료형이 있고 변수명이 있습니다.일반적으로 인자 형태는 변수명 뒤에 표시합니다. ※ 인자 부분을 비워둘 수도 있습니다. (비-프로토타입)이는 C언어에서만 적용되고 C++은 반드시 인자갯수, 타입을 명시해줘야합니다.2. 함수 포인터의 장단점장점 ..
[C언어] 비트 연산자를 활용하여 계산기 만들기
·
C
※사칙 연산(+, -, *, /)만 다룹니다.논리회로는 귀찮아서 따로 그리지 않았습니다. 1. 반가산기와 전가산기컴퓨터는 전가산기를 통해 덧셈을 수행합니다.그 과정에서 반가산기를 사용하기에 반가산기를 포함하여 설명드립니다. 이진수 덧셈과 십진수 덧셈은 다를게 없습니다. 10진수 두 수 7과 4가 있다고 칩시다.이 두 수의 이진수 덧셈과 십진수 덧셈과정을 봅시다. 각 수를 A와 B라고 부르겠습니다.10진수인 경우A, B 각각 일의 자리부터 더한다.A의 현재 자릿수에 1을 B의 현재 자리수만큼 덧셈을 반복한다.더하는 도중 현재 자릿수가 9를 초과할 시 현재 자릿수를 0으로 만들고 다음 자릿수를 1올림한다. (올림 발생)올림 발생 후 나머지를 더한다.이 네가지대로 더한다면 A가 7이고 B가 4니까7에 1을 4..
[C] strdup, strjoin, split 구현
·
C
stdup의 경우 기존에 C에 있던 함수이기 때문에 많은 분들이 익숙하시겠지만 join과 split의 경우 C언어에 없는 함수이기 때문에 많이 생소하실 겁니다. 다른 언어에서 주로 사용되는 join과 split의 경우 문자열을 이어주고, 특정 문자 기준으로 나누어 주고 해주는 함수이죠 좀 더 자세히 알고 싶으시면 파이썬 join과 split에 대해서 검색해 보시면 됩니다. Strdup#include const char *(const char *s1);함수 내에서 힙메모리에 s1 문자열 크기의 공간을 할당 후 문자열을 복사시키고 반환해주는 함수입니다. #include #include #include const char *my_strdup(const char *s1) { char *ret; int len =..
[C] strcmp / strncmp / memcmp 사용법과 구현 및 strncmp와 memcmp의 차이
·
C
참고로 이 함수들의 반환값은 1, 0, -1 이 세가지이며 서로 문자를 비교할 때 묵시적 unsigned char로 형변환 합니다!1은 왼쪽 문자가 더 큰경우-1은 오른쪽 문자가 더 큰경우0은 문자열이 같은 경우  1. strcmp#include int strcmp(const char *s1, const char *s2)s1 문자열과 s2 문자열이 서로 맞는지 확인해 주는 함수입니다. 문자열이 서로 맞다면 0, 다르다면 처음으로 다른 문자들의 차이값을 반환합니다. strcmp 구현 int ft_strcmp(const char *s1, const char *s2){ size_t i; i = 0; while (s1[i] == s2[i]) { if (!s1[i]) return (0); i++; } ..
[C] strcat / strncat / strlcat 사용법과 구현
·
C
문자열을 쓰다 보면 가끔 문자열을 합치고 싶을 때가 있습니다. 이때를 위해 C언어에서는 strcat 함수들을 제공하죠 strcat 부류 함수들은 문자열 뒤에 다른 문자열을 이어 붙여주는 함수입니다. strcat 함수들은 보통 strcat, ncat, lcat으로 분류 됩니다. strcat은 문자열에 문자열을 이어 붙여주는 함수 strncat은 문자열에 문자열을 n번 이어 븉여주는 함수 strlcat은 문자열에 문자열을 n - 1 번 이어 붙여주는 함수 이렇게 설명할 수 있겠네요 이번 포스팅에서는 이 함수들에 대해서 공부해 보는 시간을 가져보겠습니다. strcat #include char*strcat(char *restrict s1, const char *restrict s2) intmain(void) {..
[C] strlen / strcpy / strncpy / strlcpy 사용법과 구현
·
C
가끔 C언어를 하다보면 문자열 길이가 궁금할 때도 있고 문자열을 복사시키고 싶을 때가 있습니다.그럴 때 보통 string.h 헤더파일에 있는 함수들을 사용하죠 저희가 이번 포스트에서 볼 함수들은 문자열 길이를 구해주는 strlen 함수와문자열을 복사시켜주는 strcpy 계열의 함수! strlen 함수 먼저 보시죠  1. strlen#include size_t strlen(const char *s)#include int main(void){ char str[13] = "hello world!"; printf("%zu\n", strlen(str)); // 12}매개변수로 들어오는 s 문자열의 길이를 size_t 자료형으로 반환해 주는 함수입니다. 예를 들어 "hello world!" 이런..
[C] itoa / atoi 구현
·
C
지금은 printf가 있어서 현재 값이 정상적으로 입력이 되었는지 %d나 %s로 쉽게 확인할 수 있습니다. 하지만 과거엔 printf가 없었고 write함수로 출력했었죠write함수는 문자열만 출력이 가능했었는데요 이때 정수를 write로 출력할 수 없었기에 정수를 문자열로 변환시켜 출력하곤 했습니다.그래서 주로 itoa함수를 사용해 정수를 문자열로 변환시켜 출력을 했었습니다. 그리고 반대로 사용자 입력 argv로 사용자 입력을 받은 문자열을 정수로 변환시켜야 할 때도 있습니다.이때는 보통 atoi 함수를 사용해서 문자열을 정수로 변환시켜 변수를 초기화 하곤 합니다. 이번 페이지에서는 itoa와 atoi함수를 보다 확실하게 이해하기 위해 구현하는 방법까지 살펴 보겠습니다.구현하기 앞서 우리는 ascii코..
원피스는 실존하다