강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của kohy7414157
kohy7414157

câu hỏi đã được viết

C++ Học Theo và Thực Hành của Hong Jeong Mo

6.2 Khái niệm cơ bản về mảng [2 trên 2] mảng

6분 질문이요!!! 제가 시험삼아해봤는데 왜 이것들 주소가 같죠????

Đã giải quyết

Viết

·

430

4

#include <iostream>
using namespace std;

const int ABC = 50;
void getData(int array[]);
void test(const int array[]);

int main()
{
	int grades[ABC];
	float average;
	getData(grades);
	cout << &grades[0] << endl;//왜 이것들 주소가 다 같죠? 달라야되는거 아닌가요??
	test(grades);
	cout << &grades[0] << endl;//왜 이것들 주소가 다 같죠? 달라야되는거 아닌가요??
	return 0;
}

void getData(int array[])
{
	
	int hehehe;
	cout << "Please input a number " << endl;
	cin >> hehehe;
	array[0] = hehehe;
	
	cout << &array[0] << endl;//왜 이것들 주소가 다 같죠? 달라야되는거 아닌가요??
	
}

void test(const int array[])
{
	cout << &array[0] << endl; //왜 이것들 주소가 다 같죠? 달라야되는거 아닌가요??
}
C++

Câu trả lời 13

2

honglab님의 프로필 이미지
honglab
Người chia sẻ kiến thức

6.2 영상 교체하였습니다.

2

honglab님의 프로필 이미지
honglab
Người chia sẻ kiến thức

main()에서 선언된 int array[10];의 array는 배열의 이름(식별자 identifier)이고 doSomething(const int array[10])의 array는 배열같아 보이지만 주소를 저장하는 포인터 변수입니다.
유튜브 문제는 아쉽게도 잘 모르겠네요. 혹시 방법을 알게 되면 해결해보겠습니다.

2

honglab님의 프로필 이미지
honglab
Người chia sẻ kiến thức

맞습니다. 또 이상한 내용 있으면 언제든지 알려주세요. 

2

honglab님의 프로필 이미지
honglab
Người chia sẻ kiến thức

엇 지금 다시 봤는데 또 큰 걸 찾아내셨네요. 강의가 틀렸습니다. 주소값을 저장하는 포인터 변수만 새로 선언이 되고 배열의 내용물이 복사가 되지는 않습니다. 잘 보시면 강의에서는 &array[0]이 아니라 &array를 출력하고 있네요. 이것도 얼른 수정하겠습니다. 다만 뒤에서 std::vector같은 컨테이너를 사용하실 때에는 복사를 하게 되는데 그건 한참 뒤에 나옵니다. 감사합니다.

1

honglab님의 프로필 이미지
honglab
Người chia sẻ kiến thức

왜 달라야 한다고 생각하시나요?

0

kohy741님의 프로필 이미지
kohy741
Người đặt câu hỏi

완벽해요

0

kohy741님의 프로필 이미지
kohy741
Người đặt câu hỏi

아아아아아아악!!!!! 이제 완벽히 이해됐어요 감사합니다.

0

kohy741님의 프로필 이미지
kohy741
Người đặt câu hỏi

그리고 왜그런진모르겠지만 유튜브 강의는 3초마다 끊겨서 못보겠어요 다른동영상은 안그러는데 정모형꺼만 그래요

0

kohy741님의 프로필 이미지
kohy741
Người đặt câu hỏi

배열 이름 앞에 &를 붙인 것과 붙이지 않은 것이 문법상 동일하게 처리되면

&array[0] 이거랑  array 이걸 찍으면 같은게 나오겠네여 왜냐면 첫번째앨리먼트랑 어뢔이자체의변수(?)의 주소는 같으니까 

그리고

&array 이거는 포인터변수의 주소니까 다른거네요???』 

이거는 틀린말인가요??? 

그리고 배열 이름 앞에 &를 붙인 것과 붙이지 않은 것이 문법상 동일하게 처리되면 왜 저 두번째 코드에서 이부분은 두번째꺼만 다르게 나오는거죠??

cout << &array[0] << endl;		/*이 세 개는 예상대로	*/
	cout << &array << endl;			/*두번째꺼만 다르게*/
	cout << array << endl << endl;	/*나오는데*/

0

honglab님의 프로필 이미지
honglab
Người chia sẻ kiến thức

이것도 좋은 질문입니다. 이건 C언어 강의에서 더 자세하게 다루는 내용입니다. 배열의 이름(identifier)은 내부적으로 주소로 사용됩니다. 따라서 배열 이름 앞에 &를 붙인 것과 붙이지 않은 것이 문법상 동일하게 처리됩니다. 더 자세한 내용이 궁금하시다면 C언어 강의가 아직 유튜브에 있으니까 배열 부분을 참고하세요.

0

kohy741님의 프로필 이미지
kohy741
Người đặt câu hỏi

그래서 제가 또 테스트를 해봤는데요 쫌 이해가 안되네요 ;;

이 코드 안에있는 코멘트에 제 질문이 담겨있습니다.

#include <iostream>
using namespace std;

const int ABC = 50;
void getData(int array[]);
void test(const int array[]);

int main()
{
	int grades[ABC];
	
	getData(grades);
	cout << &grades[0] << endl;		/* 왜 이 세개는 */
	cout << &grades << endl;		/* 이상하게 다 같은주소로 나오죠 */
	cout << grades << endl << endl;	/* 두번째꺼만 다르게 나와야하는거 아닌가요*/
	
	test(grades);
	
	cout << &grades[0] << endl;		/* 왜 이 세개는*/
	cout << &grades << endl;		/* 이상하게 다 같은주소로 나오죠*/
	cout << grades << endl << endl;/* 두번째꺼만 다르게 나와야하는거 아닌가요*/
	return 0;
}

void getData(int array[])
{

	int hehehe;
	cout << "Please input a number " << endl;
	cin >> hehehe;
	array[0] = hehehe;

	cout << &array[0] << endl;		/*이 세 개는 예상대로	*/
	cout << &array << endl;			/*두번째꺼만 다르게*/
	cout << array << endl << endl;	/*나오는데*/

}

void test(const int array[])
{
	cout << &array[0] << endl;		/*이 세 개는 예상대로	*/
	cout << &array << endl;			/*두번째꺼만 다르게*/
	cout << array << endl << endl;	/*나오는데*/
}

0

kohy741님의 프로필 이미지
kohy741
Người đặt câu hỏi

오 이해됐어요 그러니까 &array[0] 이거랑  array 이걸 찍으면 같은게 나오겠네여 왜냐면 첫번째앨리먼트랑 어뢔이자체의변수(?)의 주소는 같으니까 

그리고

&array 이거는 포인터변수의 주소니까 다른거네요???

0

kohy741님의 프로필 이미지
kohy741
Người đặt câu hỏi

왜냐하면 어뢔이를 함수의 퍼뢔미터로 하면 새로 선언하는거기때문에 주소가 달라야한다고 생각합니다!!  그리고 6분쯤에 그렇게 나오는데요???

Hình ảnh hồ sơ của kohy7414157
kohy7414157

câu hỏi đã được viết

Đặt câu hỏi