평소에 포인터와 배열이 뭔가 매칭이 잘 안되고 헷갈린다 이러면 필수로 a~i까지 다 풀어봐야 함
문 :
다음 각각의 지정된 임무를 수행하는 C++ 문장을 작성하라. 배정도 부동 소수형 값을 8 바이트에 저장하고 배열의 시작 주소가 메모리 위치 1002500에 있다고 가정한다.
각 문제에서 피룡에 따라 앞 문제의 결과를 사용해야 한다.
a) 10 요소를 포함하는 numbers라는 double형 배열을 선언하고 요소를 값 0.0, 1.1, 2.2, .... 9.9로 초기화 하라. 기호 상수 SIZE를 10으로 정의했다고 가정한다.
b) double형 변수를 가리키는 포인터 nPtr을 선언하라.
c) 배열 첨자 표기를 사용하여 배열 numbers의 요소를 출력하는 for문을 작성하라. 소수점 오른쪽 한 자리 정밀도를 이용하여 각 숫자를 출력한다.
d) 포인터 변수 nPtr에 배열 numbers의 시작 주소를 저장하는 별도의 두 문장을 작성하라.
e) 포인터 nPtr을 이용해서 포인터/오프셋 표기를 통해 배열 numbers의 요소를 출력하는 for문을 작성하라.
f) 배열 이름을 포인터로 이용해서 포인터/오프셋 표기를 통해 배열 numbers의 요소를 출력하는 for문을 작성하라.
g) 포인터 nPtr을 이용해서 포인터/첨자 표기를 통해 배열 numbers의 요소를 출력하는 for문을 작성하라.
h) 배열 첨자 표기, 배열 이름을 포인터로 이용하는 포인터/오프셋 표기를 통해 배열 numbers의 네 번째 요소를 참조하라.
i) nPtr이 배열 numbers의 시작 위치를 가리킨다고 가정할 때, nPtr + 8은 어떤 주소를 참조하는가? 그 위치에 어떤 값이 저장되어 있는가?
j) nPtr이 numbers[5]를 가리킨다고 가정할 때, nPtr -4을 실행한 후에 nPtr은 어떤 주소를 참조하는가? 그 위치에 저장된 값은 무엇인가?
답 :
#include <stdio.h>
#include <iostream>
#include <iomanip>
#define SIZE 10
using namespace std;
int main(){
double numbers[SIZE] = {0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9};//a
double *nPtr;//b
cout << fixed << setprecision(1);
for(int i=0; i<SIZE; i++){//c
cout << numbers[i] << " ";
}
cout << endl;
nPtr = numbers;//d
nPtr = &numbers[0];
for(int i=0; i<SIZE; i++){//e
cout << *(nPtr+i) << " ";
}
cout << endl;
for(int i=0; i<SIZE; i++){//f
cout << *(numbers+i) << " ";
}
cout << endl;
for(int i=0; i<SIZE; i++){//g
cout << nPtr[i] << " ";
}
cout << endl;
cout << "numbers[4] = " << numbers[4] << "t*(numbers + 4) = " << *(numbers + 4)
<< "tnPtr[4] = " << nPtr[4] << "t*(nPtr+4) = " << *(nPtr+4) << endl;//h
cout << "nPtr + 0의 주소 : " << (nPtr+0) << "tnPtr + 8의 주소 : " << (nPtr+8) << "tnPtr + 8의 값 : " << *(nPtr+8) << endl;//i
nPtr = &numbers[5];
cout << "nPtr : " << nPtr;
nPtr-=4;
cout << "tnPtr-=4 : " << nPtr << "t값은 : " << *nPtr;//j
return 0;
}
배열은 자료구조이고 포인터는 자료타입입니다.
C에선 포인터라는 자료타입으로 배열을 다루는 것이죠