시험 오답정리.
2. 다음 중 4byte 의 크기를 가지고 있는 자료형은?
- char
- long long
- float
- double
- short
4byte 크기의 자료형은 int, float, long 등이 있다. 여기선 flaot이 해당한다.
4444
5. 2Byte의 매모리에 23이 저장되는 bit 중 옳은 것은?
- 0101 1101
- 0001 0111
- 0000 0000 0110 1100
- 0000 0000 0101 1101
- 0000 0000 0001 0111
23을 2진수로 변환 시 0001 0111 그러나, 2byte = 16bit 임으로, 나머지 0으로 채움. 즉,
0000 0000 0001 0111 이다.
13. 다음 점프문중 반복중인 명령을 중단하고 조건식으로 다시 되돌아가는 명령어는 무엇입니까?
- contunue;
- break;
- return;
- goto;
- do;
continue; continue는 선언 시, 현재 반복문의 가장 끝지점으로 이동한다. 물론, goto, 로도 가능하다.
20. int[4][3] 배열의 크기는 몇 Byte 입니까?
- 12
- 36
- 48
- 128
- 256
int 자료형은 대부분 4byte. 4 * 3 * 4 = 48. 48byte 이다.
22. 다음 중 매개변수를 통해 넘긴 공간의 값을 수정할 수 있는 것은?
- void Change(int num);
- void Change(const int num);
- void Change(const int* num);
- void Change(int* const num);
- void Change(const int * const num);
1. 매개변수 자체가 전달. 펑션 종료 시 데이터가 날아감으로 반영되지 않음.
2. const int 로 선언되어 상수처리 되기에 매개변수 num을 변환할 수 없음.
3. int* 이지만, const int* 임으로 포인터가 가리키는 데이터를 변경할 수 없음.
4. const num 이지만, int*자체에 상수처리된 것 이 아니기 때문에, 주소는 변경 불가능 하나, 주소의 데이터는 변경 가능.
5. const int* 이기에 가리키는 데이터 변경 불가능, const num 이기에 주소값도 변경 불가능.
23. 64bit 체제의 프로그램에서 포인터의 크기는?
- 2Byte
- 4Byte
- 6Byte
- 8Byte
- 16Byte
32Bit체제는 32/8 로 4Byte의 크기의 주소값을 가지며, 64Bit체제는 64/8로 8Byte의 크기의 주소값을 가진다.
25. 배열 int Array[5] 의 시작 주소가 80 일 때 Array + 4 의 주소인 것은?
- 80
- 84
- 88
- 92
- 96
int = 4byte로 연산할 시, Array[0] 부터 Array[4]까지 진행함으로, 5번째 열의 시작주소를 확인하면 된다.
Array[0] = 80, Array[1] = 84, Array[2] = 88, Array[3] = 92, Array[4] = 96
26. 배열 float Array[5]의 시작주소가 100 일 때 값이 다른 것 은?
- &(Array[3])
- Array + 3
- 112
- &*(Array + 3)
- &(*Array + 3)
&(Array[3]) = 100 + (3*sizeof(float)) = 112 float는 4byte이다.
Array + 3 = 100 + (3*sizeof(float)) = 112
112 = 112
&*(Array + 3) = 2번 항에 포인터 주소를 붙인것 임으로 112 와 같다.
&(*Array + 3), *Array = 100 &(100+3) 임으로, 100번지이다. 값이 변한거지 주소가 참조되지 않았다.
28. 다음 중 컴파일러가 수행하는 일이 아닌것은?
- 소스코드를 기계어로 변환
- 컴파일링 에러 확인
- 일으킨 문제의 소스코드 라인 지시
- 파일 참조 오류 반환
- 실행 도중 에러에 대한 반환
실행 도중 에러에 대한 반환은 컴파일러가 아닌 운영체제가 처리한다.
30. 다음 중 arr[1][0]을 가리키지 않는 것은?
- arr + 1
- &arr[1]
- &arr[0] + 1
- &arr[1][0]
- *(arr[0] + 1)
arr + 1 = arr[1]의 시작주소 의미, arr[1][0]을 가리킨다.
&arr[1] : arr[1]의 시작주소 의미, arr[1][0]과 동일한 값을 가짐.
&arr[0] + 1 : arr[1]의 시작주소를 의미, arr[1][0]을 가리키거나 값을 가짐,
&arr[1][0] : arr[1][0]의 주소를 의미한다. arr[1][0]을 직접 가리키는 주소,
*(arr[0] + 1) : arr[0]의 두번째 요소인 arr[0][1]을 의미, arr[1][0]과는 관련 없음.
33. int arr[3] = {1, 2, 3}; 을 ptr이라는 포인터 변수에 저장할 때, ptr이 가리키는 값도, ptr이 가리키는 주소 값 도 변경할 수 없도록 하는 코드를 작성하시오.
- const int* const ptr = arr;
41. 보기와 같이 구조체를 동적 할당할 때 맴버의 접근 방법 중 옳은 것은?
보기 ) Struct* p = (Struct*)malloc(sizeof(Struct)*5);
- p.member;
- p[0]->member
- (*p)->member;
- *(p + 1).member;
- *(p[1])->member;
1번은 구조체가 아니라 포인터 이기 때문에 -> 로 접근해야한다.
2번은 p가 구조체 배열을 가리키지만, -> 연산자는 []와 같이 사용할 수 없다. 이미 첫번째 구조체를 참조하기 때문이다. -> 가 아니라 . 으로 바꾸어야한다.
3번은 *p가 이미 첫번째 구조체를 참조함으로 . 연산자를 사용하여야 한다.
4번은 포인터 변수 임으로 *(p + 1) -> member 가 되어야 한다.
5번은 member가 포인터 라면, 올바른 접근방법이다. member가 포인터 인지 아닌지가 불분명하다.
42. const int * p 의 설명으로 옳지 않은 것은?
- p 가 가리키고 있는 변수의 값의 수정이 불가능하다.
- p 가 가리키고 있는 주소의 변경이 가능하다.
- p 가 가리키고 있는 변수의 값에 접근이 불가능하다.
- p를 통하여 다른 변수를 가리킬 수 있게 수정이 가능하다.
- p는 자기 자신만의 주소를 가지고 있다.
const 임으로 변경은 불가능하나, 접근은 가능하다.
47. const 키워드에 대해 옳지 않은 것은?
- 기본 자료형에 사용할 수 있다.
- 매개변수에 사용할 수 있다.
- 구조체에 사용할 수 있다.
- 선언 시 초기화가 이루어져야 한다.
- 함수의 반환형으로 사용할 수 있다.
함수의 반환형으로 사용할 수 없다. C++에서는 선언 시 초기화가 이루어져야 선언된다. 그렇지 않으면 선언 될 수 없다.
50. 다음 코드의 출력 결과를 적으시오,
int arr[2][3] = {1, 2, 3, 4, 5, 6}
int(*p)[3] = NULL;
p = arr;
printf("%d\n", *(p[0] + 1) + *(p[1] + 2));
2,6
printf("%d\n", *(*(p+1)+0)+*(*(p + 1) + 1));
4,5
답 :
8
9
'서울게임아카데미 교육과정 6개월 C++ ~ DirectX2D' 카테고리의 다른 글
21일차 43.dynamic_memory_allocation (0) | 2023.04.14 |
---|---|
20일차 42.Array (0) | 2023.04.13 |
18일차 35.macro_function, 36.type_inference, 37.funtion_overloading, 38.defalut_parameter, 39.string , 40.Pointer, 41.random_number (0) | 2023.04.06 |
17일차 31.CppLangage_iostream , 32.input_output_stream, 33.variable, 34.namesace (0) | 2023.04.05 |
월 작업물 백업 3월 31일차까지 (0) | 2023.04.05 |