C언어 배열 질문입니다

조회수 4604회

int array1[100] int array2[100]

이렇게 두개의 배열이있을때

대입문 array1 = array2 을 했을때, 컴파일 에러가 무슨 이유로 발생하는건가요?

에러가 안나오고 정상적으로 하려면 어떻게 해야할까요?

  • 결과적으로 배열 이름은 배열 자체를 가리키는 게 아니라 첫 번째 원소의 포인터 주소 값입니다. 포인터 주소 값은 좌변에 올 수 없기 때문에 오류가 나는 것이고, 배열 복사 내장 함수를 사용하거나 for문을 이용하여 하나하나 복사하는 방법이 있습니다. 알 수 없는 사용자 2019.10.21 10:26
  • 감사합니다! ChoHJin 2019.10.21 15:33
  • 하나 더 덧붙이면 *의 의미는 (포인터변수에서) 해당 변수의 주소가 가리키고 있는 값 이라고 생각해시면 되겠습니다. 채택 부탁드립니다! ohsangyun 2019.10.21 17:20
  • 에러문구를 보시면, (저는 visual studio를 쓰니 해당 프로그램을 기준으로 말하겠습니다) [식이 수정할 수 있는 lvalue여야 합니다] 이런 에러문구가 뜹니다. 이 에러문구를 해석해보자면, 배열의 이름은 그배열이 시작하는 주소값이므로, 만약 이것이 바뀌게 되면, 배열의 시작 위치가 사라지게 되므로, 이를 수정하기 못하도록 컴파일러가 에러로 막는다는 뜻이 되겠네요. 출처: https://hamji.tistory.com/127 [Be the blues] ohsangyun 2019.10.22 17:21

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    array는 첫번째 배열의 주소를 가리키는 포인터배열입니다. 포인터변수에 int형(주소값이 int형으로 들어감)을 넣으라고 하니 에러가 나죠

    *array1 = *array2
    
    

    을 해보세요

    • 감사합니다! 혹시 array1 = array2에서 array1이 할당된 메모리를 잃게되서 메모리유수 때문에 컴파일에러가 발생하는건가요? ChoHJin 2019.10.22 00:44

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)