• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

함수와 메인의 배열 주소가 같게 찍히는데 이게 올바른건가요?

19.03.21 14:41 작성 조회수 145

0

인프런의 UI가 불편하여 계속 질문이 날아가고 짤리는것 같습니다

혹시 두번 업로드 되었거나 코드가 조금 이상해도 양해 부탁드리겠습니다

질문은 코드 와 출력 다음 말씀드리겠습니다.

#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

dot님의 프로필

dot

질문자

2019.03.21

제가 프로그래밍이 익숙하지않아 교수님께서 이해가 힘든것 같습니다

제궁금증을 천천히 다시 얘기해 보겠습니다

압축해가며 제가 이해한 방식대로 간략히 설명해보겠습니다.

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

dot님의 프로필

dot

질문자

2019.03.21

제가 프로그래밍이 익숙하지않아 교수님께서 이해가 힘든것 같습니다

제궁금증을 천천히 다시 얘기해 보겠습니다

압축해가며 제가 이해한 방식대로 간략히 설명해보겠습니다.

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

좋은 질문인 것 같은데 명확하기 이해하기는 어렵네요. 왜 인덱스당 +4가 되어야 한다고 생각하시나요?

0

좋은 질문인 것 같은데 명확하기 이해하기는 어렵네요. 왜 인덱스당 +4가 되어야 한다고 생각하시나요?