본문 바로가기
반응형

개발/C, C++29

[C/C++] call by value VS call by reference [C/C++] 포인터(Pointer) 개념에 대해서 포스팅을 했었는데, 혹시 기억하시나요? 포인터를 배우면 가장 많이 헷갈리는 부분이 call by reference와 call by value 개념에 대해서 이해를 할 수 있게 됩니다. 코딩을 처음 할 때 가장 헷갈린 부분인데 해당 부분에 대해서 오늘 알아보도록 하겠습니다. 이 부분을 잘 이해해야 원하는 결과를 얻을 수 있습니다.  사전 지식caller는 함수 호출하는 함수를 의미하고, callee는 호출되는 함수를 의미합니다.아래 그림과 코드를 잘 보시면서 따라와 주시길 바랍니다. 참고로 편의상 memory를 간략하게 작성했지 실제로 그림과 같이 저장되지는 않습니다.void a_function(int a) { printf("a_function: %p\n.. 2024. 5. 15.
[C/C++] printf 함수의 모든 것 개발을 하거나 코딩 테스트를 할 때 가장 많이 하는 것은 아마 디버깅일 것이라고 생각됩니다. 한 번에 딱 원하는 코드를 작성하면 좋지만, 그렇지 않을 경우에 디버깅을 많이 하게 됩니다. 이럴  때 유용하게 사용되는 것이 printf로 출력하는 것이라고 생각됩니다. 이번 포스팅에서는 printf 함수에 대해서 알아보려고 합니다.  printf 함수printf 함수는 아래와 같은 구조로 되어 있습니다. int printf(const char * format, ...); printf 함수 형식 지정자printf 함수의 형식 지정자는 아래처럼 구성되어 있습니다.%[flags][width][.precision][length][specifier] flags왼쪽 정렬 등 출력 형태를 지정합니다.flagsdescrip.. 2024. 5. 15.
[C/C++] 포인터(Pointer) 개념 C언어에서의 꽃은 포인터라는 말을 들어보셨나요? 오늘은 포인터가 무엇인지에 대해서만 다뤄보도록 하겠습니다. 포인터라는 개념을 잘 잡게 된다면 포인터를 이용한 코드들을 이해하는데 큰 도움이 될 것이라고 생각합니다.  포인터(Pointer) 개념포인터(Pointer)란?포인터는 메모리 주소를 저장하는 변수입니다. 즉, 포인터 변수가 가지고 있는 값은 메모리 주소이고, 여기에 어떤 방법을 쓰게 되면 가지고 있는 메모리 주소가 가리키고 있는 값을 접근할 수 있습니다. 이렇게 설명하면 이해하기 어렵기에 예를 들어보도록 하겠습니다.32bit 운영체제에서는 주소 단위가 4 Byte입니다. 64bit 운영체제에서는 주소 단위가 8 Byte입니다. 아래 그림에서는 32bit 운영체제에서의 예시라서 말씀드리게 되었습니다... 2024. 5. 13.
[C/C++] inline 함수 지난 시간에 함수에 대해서 배웠습니다. 이번에는 inline 함수에 대해서 배워보도록 하겠습니다. inline 함수라는 이름에서 알 수 있듯이 함수를 in + line 하겠다는 느낌이 오지 않으신가요? 그럼 inline 함수에 대해서 알아보도록 하겠습니다.  inline 함수inline 함수는 함수 호출의 오버헤드를 줄이기 위해 컴파일러에 의해 해당 함수의 코드를 호출하는 곳에 직접 삽입되는 함수입니다. 호출되는 함수의 코드가 복사되어서 함수를 호출하는 곳으로 복사가 된다고 생각하시면 됩니다. 이렇게 되면 함수를 호출하기 위해서 시스템 내부적으로 동작되는 부분이 사라지고 바로 코드가 실행되기 때문에 실행 속도가 향상됩니다.  inline 함수 예시지난 포스팅에서 선언한 예시를 가져왔습니다. 다른 점이 하.. 2024. 5. 2.
[C/C++] 함수(function) 지금까지는 main 함수에서 모든 코드를 작성하여 코드를 작성했습니다. 이제는 main 함수가 아닌 다른 함수들을 만들어 보려고 합니다. main 함수를 통해서 대략적인 구조는 아셨을 텐데 조금 더 구체적으로 알아보도록 하겠습니다.   함수 정의함수를 정의하는 방법은 간단합니다. 먼저 해당 함수가 reutrn 하는 타입을 작성합니다. 그리고 해당 함수에서 원하는 동작을 함수 이름으로 작성합니다. 마지막으로 해당 함수를 부를 때 필요한 매개변수를 작성합니다. 그리고 중괄호를 작성해야 함수의 기본 뼈대가 완성됩니다.ruturn_타입 함수_이름(함수_매개변수) { //코드} 함수 정의 예시간단하게 정수 2개를 입력받아 더하는 함수를 만들어 봅시다. 가장 먼저 해당 함수의 이름을 무엇으로 할까 고민을 해봐야할 .. 2024. 5. 2.
[C/C++] 연산자 우선순위 드디어 연산자에 대해서 다 다뤄봤습니다. 그럼 이제 연산자 우선순위에 대해서 알아보도록 합시다. 연산자 우선순위는 정말 중요합니다. 연산의 결과가 예상한 것과 다르게 된다면 해당 프로그램은 제대로 동작할 수 없기 때문입니다. 연산자 우선순위 연산자 우선순위는 다양한 연산자가 표현식 내에서 어떤 순서로 계산되어야 하는지 결정하는 규칙입니다. 연산자 우선순위에 따라 연산자를 사용할 때 괄호를 추가하여 원하는 계산 순서를 지정할 수 있는데, 개인적으로 연산자 우선순위가 헷갈릴 때에는 괄호를 많이 씁니다. 아래의 연산자 우선순위 표를 보시면 숫자가 작을수록 먼저 연산이 됩니다. 연산자 우선순위 예시 아래 코드의 결과는 어떻게 될까요? 결과를 예측해 보세요. 이전에 배웠던 short circuit을 생각해서 va.. 2023. 9. 18.
[C/C++] 캐스팅 연산자 개발을 하다 보면 캐스팅 연산자를 사용할 때가 생각보다 많습니다. 함수 호출을 하기 위해서 인자 값으로 값을 줄 때 캐스팅을 해서 주는 경우도 자주 있습니다. 캐스팅 연산자에 대해서 알아보도록 합시다. 캐스팅 연산자 캐스팅 연산자는 데이터 형식을 다른 데이터 형식으로 변환하는 데 사용됩니다. 캐스팅 연산자에는 2가지가 있는데 바로 명시적 캐스팅과 암시적 캐스팅입니다. 명시적 캐스팅 명시적 캐스팅은 명시적으로 데이터 형식을 변환하고자 할 때 사용됩니다. 명시적으로 타입을 변환하는 것이기 때문에 개발자가 인지하고 있습니다. (데이터 타입)변수 아래는 간단한 코드인데, 사칙연산 등을 할 때에는 타입을 맞춰주는 것이 좋습니다. 그렇지 않으면 의도한 결과가 나오지 않을 수 있기 때문입니다. #include int.. 2023. 9. 17.
[C/C++] sizeof 연산자 이제 연산자 시리즈가 거의 끝나갑니다. sizeof 연산자는 개인적으로 유용한데 주의할 점이 있습니다. 알아보도록 합시다. sizeof 연산자 sizeof 연산자는 변수나 데이터 타입의 크기를 바이트 단위로 계산하는 데 사용됩니다. sizeof(변수 또는 데이터 타입) sizeof(변수) 변수의 크기를 바이트 단위로 계산할 때 아래와 같이 사용됩니다. 보통은 배열의 크기를 구하거나 메모리 할당에 필요한 크기를 구할 때 사용됩니다. #include int main() { int arr[3] = { 0 }; printf("arr size : %d\n", sizeof(arr)); return 0; } 결과는 아래와 같습니다. 12가 나온 이유는 arr index가 3이라서 3, int가 4 바이트이기 때문에 .. 2023. 9. 15.
[C/C++] 쉼표 연산자(,) 쉼표가 연산자라는 것을 알고 계셨나요? 아마 모르신 분들도 많이 있으실 것이라 생각됩니다. 너무 자연스럽게 사용하고 있으시거나 아예 사용하지 않고 계시는 분들도 많으신 걸로 알고 있습니다. 실제로 제가 개발을 할 때 보면 쉼표 연산자는 거의 안 쓰이는 것 같습니다. 하지만 모든 알고 있으면 언젠가는 도움이 되기 때문에 알아봅시다. 쉼표 연산자(,) 쉼표 연산자는 여러 표현식을 순차적으로 실행하고 마지막 표현식의 결과를 반환하는 연산자입니다. 그렇기 때문에 변수 선언할 때나 for문에서 자주 사용하는 것 같습니다. 쉼표 연산자는 아래와 같이 표현할 수 있습니다. expression0, expression1, expression2, ..., expressionN; 계속 표현식이 오게 되는데 마지막에 오게 되.. 2023. 9. 14.
반응형