일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- PHP #핵심정리
- C언어 #부록
- HTML #핵심정리
- MySQL #핵심정리
- C++ 언어 #핵심정리
- C++ 언어 # 핵심 정리
- Hacking #Baic
- C언어 # 부록
- C언어 #핵심정리
- Bandit
- C언어 # 핵심 정리
- shell_script
- C++ 언어 # 핵심정리
- Today
- Total
목록C Language Basic (48)
cCcode

1. 함수에서 배열 매개변수 사용 함수에서 배열을 매개변수로 사용하면 연속된 값을 전달할 수 있으며, 함수 내에서 전달 된 배열의 요소들을 수정할 수 있습니다. 함수에서 배열을 매개변수로 사용하려면 괄호 안에 매개변수 뒤 대괄호(크기 지정 X)를 사용하거나 포인터로 지정해주면 되요. 제가 저번시간에 대괄호에 들어가는 배열 크기를 생략한다고 했는데,, 그렇게 되면 함수에서는 배열의 실제 크기를 알지 못하기 때문에 그를 이용한 코드를 작성하고 나중에 수정할 때 에러 사항이 생깁니다. 그래서 sizeof(배열) / sizeof(자료형)을 통해 배열의 크기를 매개변수로 동시에 주게 된다면 배열의 크기를 알아 코드 작성이 용이할 뿐 만 아니라 유지보수 하는데도 도움이 됩니다. 여러분이 알고있는 것처럼 배열 또한 ..

1. 함수에서 매개변수 사용하기 매개변수를 사용하려면 함수를 정의할 때 괄호 안에 자료형과 변수 이름을 지정해주면 됩니다. 함수 안에서 파라미터로 전달된 값을 사용하려면 함수 정의를 하면서 명시한 변수명을 사용합니다. (파라미터로 전달할 때 사용한 변수가 아니라) 함수에서 매개변수를 여러 개 받으려면 매개변수를 ,(콤마)로 구분하면 됩니다. 이를 이용해 간단한 곱셈 연산을 수행해보겠습니다. 함수 안에 들어가는 값은 매개변수, 파라미터(parameter), 형식 매개변수(formal parameter), 인자(함수 바깥에서 전달 된 값이 저장되는 변수)등 많은 용어로 불립니다. 그리고 함수를 호출할 때 전달하는 값이나 변수는 인수, 전달 인자, 아규먼트(argument), 실행 전달인자(actual arg..

1. 함수 사용하기 - 2 "Hello World!"를 출력하는 함수를 만들어보겠습니다. 여기서 main 함수는 프로그램이 시작되었을 때 가장 먼저 실행되는 함수입니다. 그래서 main 함수를 가장 앞에 위치시켜야 한다고 생각할 수 있습니다만 안타깝게도 잘못된 생각입니다. 왜냐하면 C언어가 절차지향 언어라 위에서 아래로 실행되기 때문이에요. 만약 생각하신 것처럼 main 함수가 가장 위에 위치한다면 PRINT_HELLO 함수를 호출할 때 PRINT_HELLO 함수는 아직 정의 되지 않았기에 컴파일러는 알지 못합니다. 따라서 이 경우에는 함수 원형을 선언함으로써 우리가 이런 함수를 사용할 거라고 명시해주면 되요. 어,, 이렇게 보니? 우리가 그전에 구조체 배울 때 사용한 전방선언(Forward Declar..

1. 포인터 연산 사용하기 포인터 연산은 포인터 변수에 + or - 연산자를 사용합니다. 단 / or * 연산자와 실수 값은 사용할 수 없습니다. 포인터 연산은 포인터 자료형의 크기만큼 더하거나 빼는 연산을 수행합니다. 그렇기 때문에 + 1을 한 주소값이 0000006AEAB7FC19가 아닌 0000006AEAB7FC1C가 나오게 되는 겁니다. 즉, Ptr_A + 1의 의미는 메모리 주소에서 int(4byte)만큼 1번 순방향으로 이동한다는 의미입니다. □ 계산식 : sizeof(자료형) * 더하거나 빼는 값 이해를 못하셨을 분들 위해 간단히 설명해드리자면 일단 %p 서식지정자는 포인터의 메모리 주소(값을 16진수 8자릿수로 해석)를 출력할 때 사용하는 서식지정자 입니다. 그러면 16진수을 사용한다는 말..

1. 자료형 변환하기 C언어에서는 표현 범위가 넓은 부분으로 저장하면 자동으로 변환된다고 전에 잠깐 언급한 적 있는데요 이번에는 포인터끼리 변환하는 방법입니다. 단순히 괄호 안에 넣어주었던 자료형 대신 포인터 즉, *(Asterisk)를 사용하면 되는 간단한 개념입니다. ◇ (자료형 *) 포인터 numPtr에 저장된 값을 char 포인터로 받아서 해당 포인터의 크기(1byte)만큼 값을 가져옵니다. (이 때, numPtr의 주소를 가져오는 것이기 때문에 역참조가 아닌 상태로 할당을 합니다.) 즉, 자료형에 따라 역참조에 의해 가져오는 값의 크기가 달라집니다. 결과로 0x78이 나온 이유는 리틀엔디언 때문입니다. 그럼 반대로 작은 크기의 메모리에서 메모리 크기보다 큰 값을 가져온다면 어떻게 될까요? 출력해..

1. 구조체 비트 필드 사용하기 지금까지 구조체의 멤버는 각 자료형의 크기만큼 공간을 차지했습니다. 하지만 구조체 비트필드를 사용하면 구조체 멤버를 비트 단위로 저장할 수 있습니다. C99 표준에서는 비트 필드로 사용할 수 있는 자료형을 Bool, signed int, unsigned int, int로 규정되어있습니다만, 대부분의 컴파일러에선 실수 자료형을 제외한 모든 정수 자료형을 사용할 수 있습니다. 비트 필드는 다음과 같이 :(콜론) 뒤에 비트 수를 지정하면 됩니다. + 일반적으로 비트필드에는 부호없는 자료형을 주로 사용합니다. 이처럼 비트 필드의 각 멤버는 최하위 비트부터 차례대로 배치 되기 때문에 코드 주석에 적은 것처럼 비트 끝에서부터 가져올 비트를 정하는겁니다. 그럼 비트 필드 구조체의 크기..

1. 구조체와 공용체 활용하기 오늘은 구조체와 공용체를 혼용해보겠습니다. 지금까지는 구조체의 멤버로 일반 변수들만 사용했었죠. 하지만 구조체는 멤버로 일반 변수 뿐만 아니라 구조체를 멤버로 가질 수 있습니다. 구조체를 멤버로 가진 구조체는 그전과 마찬가지로 .을 사용해 계층적인 구조로 접근하시면 됩니다. 이중 포인터에 값을 할당하는 느낌이랄까요..? 여기서 주의해야 할 점은 구조체의 멤버로 들어갈 구조체를 먼저 선언해주어야 한다는 점입니다. 만약 멤버 구조체 보다 구조체를 멤버로 갖는 구조체가 먼저 선언된다면 겉보기에는 이상이 없겠지만 엄청난 수의 에러 향연을 보실 수 있습니다. 실행이 되지 않는 건 당연하고요. 그렇지만 아예 방법이 없다는 건 아닙니다. 이처럼 전방선언(forward declaratio..

1. 공용체 사용하기 이번에는 공용체를 사용해보겠습니다. 이름만 들어선 공용'체' 와 구조'체' 비슷하게 들리지 않나요? 하지만 공용체는 정의방법과 멤버를 저장하는 방식이 구조체와는 전혀 다릅니다. 공용체는 union 키워드를 사용해 정의합니다. 다만 공용체 또한, 구조체처럼 정의만 해선 사용할 수 없고 변수로 선언을 해줘야 사용할 수 있습니다. ◎ union 공용체명 변수명; 사용방법이 구조체와 거의 유사합니다. 다만 결과를 보시면 마지막에 수정한 black_smoke 멤버를 제외한 나머지 멤버들의 값이 이상해진 걸 볼 수 있습니다. 그 이유는 공용체는 모두 하나의 공간을 공유하기 때문인데요. 따라서 어느 한 멤버의 값을 저장하면 나머지 값들이 사용할 수 없는 상태가 되는겁니다. 만약 공용체 멤버를 모..