분류 전체보기 (308) 썸네일형 리스트형 [C++] 인라인 함수 함수는 호출 될 때 인수 값 스택에 push, 호출원이 다음 번지 저장, 함수 번지로 점프,스택의 함수 지역변수 공간 만듦, 함수 코드 수행, 리턴 값 넘기기, 복귀 번지로 리턴, 인수 전달에 사용한 스택 정리와 같은 복잡한 과정을 수행하기 때문에 호출이 필요 없는 짧은 코드의 함수일때 함수 호출 필요 없이 호출원에 코드를 삽입하는 인라인 함수를 사용한다. inline int randfunc(int n) { return rand()%n; } 형식은 위와 같이 함수에 inline 태그를 붙여 사용한다. [C++] 레퍼런스 레퍼런스는 변수의 별명이다. 레퍼런스는 변수 그 자체라는 느낌이라서 포인터와 다르다는 생각이 들 수 있지만, 레퍼런스도 포인터의 일종에 불과하다. int i=3; int &ri=i; 위 코드에서 컴파일러는 ri를 정수형 포인터로 생성하고 i의 주소값을 대입한다. 그리고 이후에 ri를 참조하는 문장을 (*ri)로 읽는다. 그래서 레퍼런스는 일종의 포인터이다. 레퍼런스는 참조하는 대상을 중간에 바꿀 수 없기 때문에 int const& ri는 의미가 없다. 하지만 const int& ri 는 레퍼런스가 가리키는 대상을 상수로 만든다. [C++] 가변 인수 함수 가변 인수 함수란 인수의 타입과 개수가 정해져 있지 않은 함수이다. 대표적으로 printf가 있다. printf("정수는 %d이고 실수는 %f이다.",i,d); printf는 %d, %f같은 서식문자열이 늘어날 수록 인수도 늘어난다. int GetSum(int num, ...) { int sum=0; int i; va_list ap; int arg; va_start(ap,num); for (i=0;i [C++] 함수 포인터 함수포인터는 함수를 가리키는 포인터이다. 형식은 리턴타입 (*변수명)(인수의 목록); int (*pf)(int);는 매개변수 int를 가지고 int를 반환하는 함수의 포인터이다.(매개변수 변수명은 생략가능) 함수포인터는 자신과 원형이 같은 함수의 시작번지를 가리킬 수 있다. int func(int a)에 대하여 pf = func;로 대입할 수 있다. 괄호없이 단독으로 사용된 함수명은 함수의 시작 번지를 나타내는 포인터 상수이기 때문에 &을 사용할 필요가 없다. (*pf)(2); pf(2); 위는 함수포인터로 함수를 호출하는 방법인데 pf가 함수의 번지를 나타내므로 (*pf)는 함수 자체를 나타낸다. pf(2)는 컴파일러가 지원하는 간략화된 호출 방법으로 함수포인터를 함수처럼 사용할 수 있다. typede.. [C++] Const 포인터 포인터에서 const를 int 앞에 붙일 시 pi가 가리키는 대상체가 상수가 되어 대상체를 변경할 수 없고, 포인터는 다른 것을 가리킬 수 있다. 그리고 const를 pi 앞에 붙일 시 포인터 변수 자체가 상수가 되어 다른 것을 가리킬 수 없지만 대상체의 값은 바뀔 수 있다. 포인터에 const를 사용하는 이유는 포인터로 상수를 변경할 수 있기 때문이다. 예를 들어 const int i1= 3; 라는 상수를 정의했을 때 일반적으로 이 상수를 변경할 수 없지만 int* p1 = &i1; 같은 포인터를 사용해서 상수에 접근하려고 생각할 수도 있기 때문이다. 그래서 포인터에 상수를 사용하는 것은 일종의 안전장치이다. const는 안전성을 보장할 뿐만 아니라 const char* c = "Sangsu"; 처럼 .. [C++] 문자형 배열 vs 문자형 포인터 char str[]="Korea"; char *ptr="Korea"; puts(str); puts(ptr); ptr="China"; // str="China"; str[0]='C'; // ptr[0]='C'; 위와 같이 문자형 배열이나 문자형 포인터를 문자형 상수("Korea")로 초기화 했을 때 문자형 상수는 정적 데이터 영역에 저장되어 한번 저장된 상수는 또 불러졌을 때 재사용하게 된다. 문자형 배열은 정적 데이터 영역에서 문자형 상수를 복사해서 사본을 저장하기 때문에 str[0] = 'C'처럼 요소의 값을 변경할 수는 있지만 str="China"처럼 다른 문자열을 대입할 수는 없다. 문자형 포인터는 정적 데이터 영역의 문자형 상수를 직접 가리키기 때문에 ptr = "China"처럼 다른 상수를 가리.. [C++] 포인터 배열과 배열 포인터 포인터 배열 포인터 배열은 포인터를 요소로 담고 있는 배열이다. int *arpi[5]; arpi 포인터 배열은 int형 포인터를 5개 가지고 있는 배열이다. 배열 포인터 배열 포인터는 2차원 배열 이상의 다차원 배열에서 부분 배열을 가리키는 포인터다. char arps[5][9]={"고양이","개","오랑우탄","돼지","지렁이"}; char (*ps)[9]; arps는 9바이트의 문자열을 5개 가지고 있는 2차원 배열이고 ps포인터는 9바이트 문자열을 가리키는 포인터이다. 위와 같이 배열 포인터의 형식은 요소의 자료형(*포인터명)[배열 크기] 이다. *포인터명의 괄호를 없애면 포인터 배열이 되어버리기 떄문에 없애면 안된다. 변수를 배열 포인터로 캐스팅할 때는 포인터명을 뺀 요소의 자료형(*)[배열 크.. [C++] 포인터 vs 배열 배열명은 배열의 시작번지를 나타내는 포인터 상수이다. pi 포인터 변수와 ar 배열이 있을 때 int *pi = &ar[0] = ar 로 표현할 수 있다. 포인터도 배열처럼 []연산자를 사용할 수 있다. ptr이 임의의 배열을 가리키는 포인터이고 n이 정수일 때 ptr[n] = *(ptr+n) 이다. 그래서 포인터를 배열처럼 사용할 수도 있다. 포인터와 배열의 차이점은 다음과 같다. ① 포인터는 다른 대상을 가리킬 수 있는 변수이고 배열은 상수이다. ② 포인터가 가리키는 배열의 크기는 동적으로 결정할 수 있지만 배열의 크기는 정적이다. ③ 배열의 크기는 무궁무진하지만 포인터의 크기는 4바이트이므로 함수로 배열을 전달할 때는 포인터를 이용해야한다. ④ 배열의 요소를 읽는 것은 시작번지+n으로 순차적으로 가.. 이전 1 ··· 32 33 34 35 36 37 38 39 다음