C++ (85) 썸네일형 리스트형 [C++] 다차원배열 c에서는 내부적으로 1차원 배열만을 지원한다. 그래서 다차원 배열을 c에서는 위와 같이 구현한다. ar 2차원 배열은 ar[0], ar[1], ar[2] 세개의 부분배열을 가진다. ar[0]은 부분배열의 배열명이므로 ar[0][0]의 첫번째 번지를 의미한다. [C++] 이중 포인터 이중 포인터는 함수가 포인터를 변경할 수 있게 한다. void InputName(char **pName) { *pName=(char *)malloc(12); strcpy(*pName,"Cabin"); } void main() { char *Name; InputName(&Name); printf("이름은 %s입니다\n",Name); free(Name); } main에서 InputName함수에 Name 포인터변수의 번지, 이중포인터를 전달한다. InputName함수는 매개변수로 &Name을 받기 때문에 InputName함수 내부에서 *pName은 Name이 된다. 그래서 결과적으로 포인터변수 Name에 메모리를 할당하고 문자열을 복사하게 된다. void InputName(char *pName) { pName.. [C++] malloc,calloc,realloc void *malloc(size_t size ); malloc 함수는 size만큼의 메모리를 힙 영역에 할당하고 할당한 메모리의 첫 번지를 void 포인터로 반환한다. int *arScore; int stNum; printf("학생수를 입력하세요 : "); scanf("%d",&stNum); arScore=(int *)malloc(stNum*sizeof(int)); if (arScore == NULL) { printf("메모리가 부족합니다.\n"); exit(0); } 할당은 정수형 포인터에 malloc으로 얻은 void형 포인터를 대입하는 것으로 이루어지기 때문에 해당 포인터의 자료형대로 캐스팅을 해줘야 한다. 할당할 메모리가 부족해서 할당에 실패하면 NULL을 반환한다. void free(void *.. [C++] 정수형 포인터와 void형 포인터 정수형 포인터 만약 배열에서 다음 값을 읽기 위해 포인터 변수에 1을 더했을 때 번지가 1만큼만 이동한다면 문제가 발생할 것이다. 왜냐면 int는 4바이트를 차지하고 double이 8바이트인 것처럼 데이터 자료형이 모두 1바이트만 차지하는 것이 아닐뿐만아니라 자료형마다 크기가 모두 다르기 때문이다. void main() { int ar[]={1,2,3,4,5}; int *pi; pi=ar; printf("첫 번째 요소 = %d\n",*pi); pi++; printf("두 번째 요소 = %d\n",*pi); } 위 배열 ar은 1부터 5까지 정수를 담고 있다. ar(배열명)은 그 자체로 배열의 첫번째 요소를 가리키는 포인터이기 때문에 pi = ar은 성립한다. pi++는 pi가 가리키고 있는 번지수에 1만.. [C++] 비트 연산자, 쉬프트 연산자 비트 연산자는 메모리에 직접 접근해서 비트를 계산하는 연산자이다. 종료는 6가지가 있고 쉬프트 연산자도 비트 연산자에 포함된다. ~ 비트를 반전시킨다. & 대응되는 비트가 모두 1일 때 1이다. | 대응되는 비트가 모두 0일 때 0이다. ^ 두 개의 비트가 달라야 1이다. 지정한 수만큼 오른쪽으로 비트들을 이동시킨다. &연산은 어떤 비트와 0이 &되는 비트는 무조건 0이되고 1과 &되는 비트는 원래 비트를 유지한다. 이 연산을 마스크 오프라고 한다. |연산은 어떤 비트와 0이 |되는 비트는 원래 비트를 유지하고 1과 |되는 비트는 무조건 1이 된다. 이 연산을 마스크 온이라고 한다. 비트에 반전하고 &연산을 하면 특정 자리의 비트만 뺄 수 있다. [C++] cin,cout,endl 계산속도 올리기(시간 초과 해결) std::endl은 \n보다 느리다. endl는 개행하는 것과 동시에 내부 버퍼를 비우는 역할을 하기 때문에 시간 초과가 난다면 endl 보다 \n을 이용해보자. ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin과 cout계산 속도 높여주는 코드 [C++] 범위 기반 for문(range based for statement) 범위 기반 for문은 C++11에서 추가되었는데, 배열 및 컨테이너에서 사용가능하며 기본 문법은 for ( Type elem : Container ) 이다. int a[5] = {1,2,3,4,5}; for( int i : a ){ cout [C++] this는 포인터다 class Simple { private: int value; public: Simple(int avalue) : value(avalue) { } void OutValue() { printf("value=%d\n",value); } }; void main() { Simple A(1), B(2); A.OutValue(); B.OutValue(); } main에서 OutputValue()는 매개변수가 없는데 어떻게 A인지 B인지 알고 value값을 출력할까? 그것은 사실 위 설명처럼 함수 앞의 객체의 포인터를 매개변수로 받고 있기 때문이다. OutputValue는 매개변수가 빈 것 처럼 보이지만 Simple * const 타입의 this를 매개변수로 받는 것이다. Simple *FindBig(Simple *.. 이전 1 ··· 6 7 8 9 10 11 다음