작성
·
206
0
혹시 두번 업로드 되었거나 코드가 조금 이상해도 양해 부탁드리겠습니다
질문은 코드 와 출력 다음 말씀드리겠습니다.
#include <iostream>
using namespace std;
void doSomething(int students_scores[20])
{
cout << "doSomething" << endl;
cout << (int)&students_scores << endl;
cout << (int)&students_scores[0] << " " << students_scores[0] << endl;
cout << (int)&students_scores[1] << " " << students_scores[1] << endl;
cout << (int)&students_scores[2] << " " << students_scores[2] << endl;
cout << (int)&students_scores[3] << " " << students_scores[3] << endl;
cout << "size of doSomething : "<< sizeof(students_scores) << endl;
}
int main()
{
int my_array[NUM_STUDENT];
const int num_students = 4;
int students_scores[num_students]{ 0,1,2,3 };
cout << "main" << endl;
cout << (int)&students_scores << endl;
cout << (int)&students_scores[0] << " " << students_scores[0]<< endl;
cout << (int)&students_scores[1] << " " << students_scores[1] << endl;
cout << (int)&students_scores[2] << " " << students_scores[2] << endl;
cout << (int)&students_scores[3] << " " << students_scores[3] << endl;
cout << "size of main : " << sizeof(students_scores) << endl;
doSomething(students_scores);
system("pause");
return 0;
}
main
12581260
12581260 0
12581264 1
12581268 2
12581272 3
size of main : 16
doSomething
-----------
12581256
12581260 0
12581264 1
12581268 2
12581272 3
size of doSomething : 4
계속하려면 아무 키나 누르십시오 . . .
질문 :
즉 doSomething 과 main의 배열 주소가 같게 설정이 되어있습니다.
저의 생각으로는 main함수 배열주소인 12581260부터 인덱스당 +4가 된 후에
doSomething의 주소가 되어야 한다고 생각되는데
여기 결과값은 배열 첫 인덱스부터 주소가 같습니다.
혹시 제가 실수한게 있거나 개념이 헷갈리는 것인지 확인해 주실 수 있나요??
답변 4
0
제가 프로그래밍이 익숙하지않아 교수님께서 이해가 힘든것 같습니다
제궁금증을 천천히 다시 얘기해 보겠습니다
압축해가며 제가 이해한 방식대로 간략히 설명해보겠습니다.
main함수에서
student_socres[4]를 선언했다하고
student_socres[0]..[3]까지
주소가 10, 14, 18, 22 이라고 가정할게요
(4씩 증가하는건 int가 4바이트라서 그렇다 생각합니다.)
그다음
doSomething 함수가 student_socre배열의 값들을 받고
doSomething의 새로운 students_score 배열에 main함수 students_score의 value을 집어넣는다고 생각합니다.
그럼 doSomething(students_score) 배열은 main(students_score)의 value는 같지만 주소는 달라야한다 생각합니다
예를들어 기존 배열의 10~22 사이의 주소가 아닌 26이거나 다른 주소의 값이 나와야된다고 생각합니다.
제 이러한 생각을 한 이유는 doSomething함수는 기존의 value를 받는거지 주소를 받는건 아니지 않나? 에서 시작되었습니다.
하지만 제가 올린 코드에서 보면
배열의 주소들이 같게 출력이 나왔습니다.
이부분을 질문 한거였습니다.
아직 미숙한 부분인 많아 교수님이 강의중에 얘기를 했을 수도 있고 제가 이해를 못한 걸수도 있습니다.
또한 질문이 어려워 이해가 잘 안될 수도 있죠
만약 교수님의 생각이 이렇다면 제가 다시 강의를 보며 생각을 해보도록하겠습니다
0
제가 프로그래밍이 익숙하지않아 교수님께서 이해가 힘든것 같습니다
제궁금증을 천천히 다시 얘기해 보겠습니다
압축해가며 제가 이해한 방식대로 간략히 설명해보겠습니다.
main함수에서
student_socres[4]를 선언했다하고
student_socres[0]..[3]까지
주소가 10, 14, 18, 22 이라고 가정할게요
(4씩 증가하는건 int가 4바이트라서 그렇다 생각합니다.)
그다음
doSomething 함수가 student_socre배열의 값들을 받고
doSomething의 새로운 students_score 배열에 main함수 students_score의 value을 집어넣는다고 생각합니다.
그럼 doSomething(students_score) 배열은 main(students_score)의 value는 같지만 주소는 달라야한다 생각합니다
예를들어 기존 배열의 10~22 사이의 주소가 아닌 26이거나 다른 주소의 값이 나와야된다고 생각합니다.
제 이러한 생각을 한 이유는 doSomething함수는 기존의 value를 받는거지 주소를 받는건 아니지 않나? 에서 시작되었습니다.
하지만 제가 올린 코드에서 보면
배열의 주소들이 같게 출력이 나왔습니다.
이부분을 질문 한거였습니다.
아직 미숙한 부분인 많아 교수님이 강의중에 얘기를 했을 수도 있고 제가 이해를 못한 걸수도 있습니다.
또한 질문이 어려워 이해가 잘 안될 수도 있죠
만약 교수님의 생각이 이렇다면 제가 다시 강의를 보며 생각을 해보도록하겠습니다
0
0