전체 글 (68) 썸네일형 리스트형 가변 인수 함수 가변 인수 함수는 함수를 호출할 때 전달하는 인수의 개수가 정해져 있지 않은 함수입니다. 고정 인수(반드시 전달해야 하는 인수)는 적어도 1개 이상이 있어야 하고 나머지는 ...으로 나타냅니다. #include #include //이 헤더가 포함되야 합니다. int Sum(unsigned _num, ...) {//_num은 나머지 가변 인수의 갯수입니다. int sum = 0; va_list ap; va_start(ap, _num);//리스트와 마지막 고정 인수를 넣어 줍니다. 가변인수를 가져올 준비를 합니다. while (_num > 0) { sum += va_arg(ap, int);//리스트와 가져올 가변인수의 타입을 넣어 가변인수를 가져와 더합니다. _num--; } va_end(ap);//리스트를.. 함수 디폴트 인수 함수를 정의할 때 인수의 디폴트 값을 정해줄 수 있습니다. void Func(int a = 2) {//디폴트 인수 a의 값이 2인 함수 } Func(4);//인수를 4를 전달해서 a는 4가 됩니다. Func();//인수를 생략해서 디폴트 인수인 2가 됩니다. 인수를 여러 개 넣고 싶을 때 어떤 건 디폴트 인수로 하고 어떤 건 그냥 인수로 할 수도 있는데, 이는 규칙이 있습니다. 반드시 디폴트 인수 중의 하나라도 그냥 인수들의 앞에 오면 안 됩니다. void Func(int a = 2, int b) { } Func(3);//a에 3이 전달될지, a가 디폴트 인수니까 b에 3이 전달될지 몰라 오류가 납니다. void Func(int a, int b = 2) {//이렇게 써야 합니다. } Func(3);//a.. direm E3 이어폰을 샀습니다. 원래 쓰던 이어폰이 고장나서 이번에 direm 이어폰이 가격대비 좋다고, 원음을 내준다고 하니깐 궁금해서 사봤습니다. 어떤 소리를 들려줄지 기대되네요.. 함수 오버로딩 함수를 선언 또는 정의할 때 인수 이름을 생략할 수 있습니다. void Func(int,int); void Func(int a,int b) { } 또는 이렇게 void Func(int,int) { } 정의하면 이름이 없기 때문에 위의 두 함수 인수는 쓸 수 없지만 어쨋든 이렇게 할 수는 있습니다. 이렇게 선언 정의를 할 수 있는데 C++이 함수를 구분할 때는 함수 이름과 인수들의 타입을 가지고 구분합니다. 그렇기 때문에 여기서 위의 코드에 void Func(int); void Func(int a) { } 이 코드를 추가해도 이름은 같지만 인수가 다르기 때문에 다른 함수로 취급되어 오류가 나지 않습니다. 이를 함수 오버로딩이라고 합니다. 그리고 함수를 호출할 때는, Func(1,2);//위의 함수가 실행되.. 변수, 함수 선언과 정의 먼저 파일들을 다음과 같이 만듭니다. a.h extern int a; void B(); a.cpp #include "a.h" int a = 0; void B() { a++; } main.cpp #include "a.h" int main() { B(); a = 0; return 0; } 위의 #include 문은 a.h의 파일 내용을 해당 파일 내용에 포함한다는 뜻입니다. 실질적으로 a.cpp의 파일 내용은 extern int a; void B(); int a = 0; void B() { a++; } 가 됩니다. 그리고 위의 extern문은 a의 변수를 선언한다는 의미인데 여기서 선언한다는 것은 변수가 다른 곳에 정의되있는 것을 알려주는 역할을 합니다. 여기선 a.cpp에 a 변수가 정의돼있다는 것을 a... 변수 종류 변수의 종류는 크게 4가지로 나눌 수 있습니다. 1. 지역변수 블록 내부({})에서 정의되는 변수로, 그 블록 내부에서만 유효한 변수입니다. #include void Func() { int i = 5; i++;//i에 1을 더한다. 가능 printf("%d\n",i); } void main() { Func();//6 출력 Func();//6 출력 //i=7; 불가능 return 0; } 지역변수는 해당 블록에 진입할 때 변수가 만들어지고 블록이 끝날 때 정리(폐기) 됩니다. 그런데 두 블록에서 각각 같은 이름의 변수를 선언해도 정상적으로 사용 가능합니다. 같은 블록에서 이름이 중복되지 않으면 됩니다. #include void Func() { int i = 5;//가능 } void main() { int .. 포인터 포인터는 변수의 주솟값을 저장하는 변수입니다. 여기서 주솟값은 컴퓨터 메모리 속에 변숫값이 있는 위치를 뜻합니다. 변수의 주솟값을 참조하려면 변수 앞에 &를 붙입니다. 그리고 포인터 변수를 선언하려면 변수 타입 뒤에 *를 붙입니다. int i; int* a = &i;//i의 주소를 대입 int j; a = &j; 변수를 선언할 때 컴퓨터 메모리에 값이 저장되는데 이때 저장 위치는 운영체제가 알아서 정하기 때문에 a의 값은 그때그때 다릅니다. 1. 포인터 앞에 *을 붙이면 포인터가 참조하는 변숫값을 가져올 수 있습니다. i = *a;//i=j와 같은 결과 2. 포인터는 주솟값, 즉, 숫자이므로 다음과 같이 연산이 가능합니다. a = a + 1;//a의 다음 주소값을 대입 그런데 a의 타입은 int 포인터이.. 공용체 공용체는 구조체와 달리 각 멤버들이 메모리 위치를 공유합니다. 공용체를 생성할 때는 앞에 union을 붙입니다. union A { short a;//위치 0바이트 int b;//위치가 2바이트가 아니라 0바이트 입니다. }; A a; a.a = 4; a.b = 8;//a와 b맴버는 같은 메모리 위치에 있으므로 a의 값도 바뀌게 됩니다. 공용체의 크기는 공용체의 각 멤버들 중 가장 큰 멤버의 크기가 됩니다. 공용체의 이름을 지정하지 않을 수 있는데 이러면 각 멤버를 변수 생성해서 접근하는 것이 아니라 그냥 접근할 수 있습니다. union { int c; unsigned d; }; c=-3; d=5; 추가 : 공용체도 구조체와 마찬가지로 C언어에서는 공용체 변수를 정의할 때 앞에 union을 붙여야합니다. 이전 1 2 3 4 5 6 7 8 9 다음 5/9