kjs89271s   2년 전

이 소스는 배열과 변수 a,b를 함수에서 값을 변경하려 시도했던 소스입니다.

change 함수에서 a,b는 매개변수 a,b이므로 실제 main 함수 내부에서의 a,b값을 변화시킬 수는 없다고 알고 있습니다.

그런데 배열 arr은 change함수 내부에서 포인터를 사용하지 않았음에도 값을 변경시키는 경우 main함수 배열 arr에 영향을 미치는데, 혹시 이 이유를 알 수 있

을까요?

dustkd1004   2년 전

arr를 전달하는 것이기 때문에 arr배열의 포인터값이 전달됩니다.

이 코드를 실행하면

007EFD14
1
1
1
0
0

이런식의 출력값이 나와요. 따라서 저 주소값의 내용이 바뀌게 되는 거죠 

kjs89271s   2년 전

@dustkd1004 답변 감사합니다.  arr배열의 포인터 값이 전달된다는 의미에서 조금 더 궁금한 부분이 있습니다.

위 소스에서 arr[0],arr[1],arr[2]값을 변경한 경우 모두 1로 변경이 되었는데 그렇다면 arr배열 각각의 배열마다 모든 포인터 값이 전달되는 것인가요?

가령 


arr[0]의 포인터 값인 ptr

arr[1]의 포인터 값인 ptr2

arr[2]의 포인터 값인 ptr3 처럼 arr[9]까지 각각의 포인터 값이 모두 함수로 넘어가게 되는 건가요?

dustkd1004   2년 전

아뇨 arr는 arr[10] 배열의 시작주소를 뜻해요 &arr[0]랑 같은 값이죠

사실 배열의 원소에 접근하기 위해서는 모든 원소의 포인터를 알 필요는 없죠. 배열의 시작주소만 알면 다른 원소는 해당 주소에서 int * i 만큼 이동하면 되니까요.

아래 링크로 가셔서 한번 정독 해보시는 게 좀더 확실하게 이해되실 것 같네요.

http://www.tcpschool.com/c/c_p...

kjs89271s   2년 전

@dustkd1004 링크 감사합니다

dustkd1004   2년 전

https://reakwon.tistory.com/9

이 링크가 더 정확하게 설명해주시네요 윗 링크는 포인터 배열에 대한 내용이고 아래 링크는 배열과 그 배열의 포인터의 관계를 설명해주는 링크입니다.

댓글을 작성하려면 로그인해야 합니다.