PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2009/07/20 15:18:13
Name DEICIDE
Subject C++ 포인터를 이용한 계산 문제 질문입니다.
요즘들어 C++ 질문을 도배하다시피 올리고 있는데 일단 죄송하다는 말씀을 드리고...
게시판의 다양성을 해치지 않기 위해서 해결받은 질문들은 삭제하도록 하겠습니다.
한번 열심히 공부해보자! 하는 정성을 너그러이 보아 주셨으면 감사하겠습니다.


다음은 간단한 포인터를 이용한 배열 계산 문제입니다.


#include <iostream>
#include <vector>
#include <string>

using namespace std;

template <typename elemType> const elemType* find(const elemType *arr, int size, const elemType &value)
{        
        if(!arr || size < 1)
                return 0;
        
        for (int ix=0;ix<size ; ++ix)
        {
                if(arr[ix]=value)
                        return &arr[ix];
                else
                        return 0;
        }        
}

int main(void)
{
        int arr[] = {1,2,3,4,5};        
        int size = 5;
        int value = 3;
        
        find(&arr, size, value);        
}


///

여기에서 find() 함수를 호출하는 부분에서 오류가 나는데,
배열 arr[] 의 주소를 가지고 호출하는 파라미터 부분에서 오류가 납니다.
그러니까 배열 arr[]을 읽어들이는 템플릿 부분. const elemType *arr 가 템플릿 매개변수가 모호하다는 에러가 자꾸 뜨는데
배열 arr[] 을 int 형 배열로 선언했고, 그 주소를 넘겨주는데 뭐가 모호하다는 건지;;
간단한 문제 같은데 해결이 되지 않으니까 속상하네요.

도움 주시면 감사하겠습니다.

ThEnd.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
MoreThanAir
09/07/20 15:22
수정 아이콘
요즘 한창 C++에 재미를 붙이신 것 같네요 ^^


일단 두 가지의 문제가 발생하는 군요.

1. find(&arr,size,value); 여기서 arr 자체가 주소값을 가지는 포인트 상수이므로

find(arr,size,value)로 호출하는 것이 맞습니다.

2. 이렇게 수정하고 나면 또 에러가 발생합니다.

if(arr[ix]=value) 이 부분에서 에러가 발생하는데

arr을 const로 선언했으므로 거기에 value를 할당할 수 없다는 에러입니다.

여기에 값을 할당할 생각이라면 const로 선언하지 않는 것이 방법이겠네요.
09/07/20 15:36
수정 아이콘
MoreThanAir님// 하하;;; 재미들린것 같다 라고 이쁘게 보아주신다면 감사하고요...
그렇다면 arr 배열을 직접 넘겨주라는 말씀이시죠?
제가 잘못 이해한 것인지...
배열을 직접 넘겨주는 것 = 배열의 주소값을 넘겨주는 것
이라고 알고 있었거든요.
배열을 직접 넘겨주어도 배열 데이터가 다 넘어가는 것이 아니라 첫 요소의 주소값이 넘어간다고...
그래서 &arr 이런 식으로 배열의 주소값을 넘겨주어도 결과를 얻어낼 수 있을 것이라 생각했는데 아니었나봅니다.

아, 그리고 if 문은 == 항등연산자를 사용해야 하는 건데 제가 실수했네요; ㅡ_ㅡ;;

으으으으;;; 그런데 이번에는 또 다른 문제가 발생하는데
컴파일에는 문제가 없는데 실행하니까 에러가 발생하네요??
if(arr[ix] == value)
이 부분에서 계산을 하지 못하고 튕겨버리는데 왜 그럴까요?
09/07/20 15:42
수정 아이콘
아;; 문제를 해결했습니다.
if / else 문을 잘못 두었군요.
for문이 끝날때까지는 돌려야 하는데 끝나기도 전에 0 을 리턴해버리니;;;;

main() 에서 0을 리턴받았을 경우 오류체크를 아직 추가하기 전이라서 그랬군요.
좌우지간 답변 정말 감사합니다!
정신놓은너구
09/07/20 18:02
수정 아이콘
DECIDE 님//
"배열을 직접 넘겨주어도 배열 데이터가 다 넘어가는 것이 아니라 첫 요소의 주소값이 넘어간다고...
그래서 &arr 이런 식으로 배열의 주소값을 넘겨주어도 결과를 얻어낼 수 있을 것이라 생각했는데 아니었나봅니다. "

에, 첫번째 줄은 맞는 이야기입니다. 그러나, "첫 요소의 주소값"이므로, 정확히 표현하자면 &arr[0] , 이렇게 되는거죠.
&arr 은 첫 요소의 주소값을 저장하고 있는 arr 이라는 변수의 주소입니다. 즉, 첫 요소의 주소값이 저장되어 있는 공간의 주소가 되는거죠.

첫번째 요소의 주소가 0x2000 이라 가정하면,
&arr[0] -> 0x2000
&arr -> 0x2000 이라는 값이 저장된 공간의 주소

죄송합니다만...제가 더 쉽게 설명드릴 능력이 없군요..ㅡ,.ㅡ;;
09/07/20 19:09
수정 아이콘
정신놓은너구리님// 아하, 그렇군요.
첫 요소의 주소값과
첫 요소의 주소값이 저장되어있는 공간의 주소값

이거 뭐 약간 유상무상무 스럽긴 하지만 님의 설명이 이해가 잘 되었습니다. 감사합니다.
09/07/20 20:13
수정 아이콘
배열의 주소는 참 재미있지요. arr, &arr[0]와 &arr 은 조금씩 다릅니다.
최근 공부하시는것 같으니 생각해볼 문제로 적합하겠네요.
sizeof(arr), sizeof(&arr[0]), sizeof(&arr), cout<<(int)arr, cout<<(int)(&arr[0]), cout<<(int)(&arr) 등을 해보세요!!
09/07/20 21:13
수정 아이콘
질문글 삭제는 안 하셔도 됩니다. 나중에 같은 질문을 하러 온 사람이 검색해서 도움을 얻어간다면 그만큼 좋은 일도 없겠죠,.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
60041 컴퓨터 고장에 관한 질문입니다~!! 열정적으로1686 09/07/20 1686
60040 지산 락페스티벌 질문 [7] 잠잘까2129 09/07/20 2129
60039 서울 부근에서 가족끼리 놀러갈 수 있는 곳이 어딜까요? [2] 건강이제일1535 09/07/20 1535
60038 닭가슴살 조리법 질문하셨던 분들... [3] 릴리러쉬1925 09/07/20 1925
60037 면세점 질문이요 ~ [2] JIRO1639 09/07/20 1639
60036 의자에 앉아있을땐 크게 문제가 없는데 (허리관련) 모모홍차1557 09/07/20 1557
60035 기타 칠 때 질문이요~ [4] 유나얼2139 09/07/20 2139
60034 옷 관련 질문입니다 [13] 카푸치노1826 09/07/20 1826
60032 프로즌 쓰론 패치 순서에 대해서 간단한 질문입니다. [3] Suiteman2157 09/07/20 2157
60031 IELTS에 대해 질문드립니다. [2] Kaga2126 09/07/20 2126
60030 인터넷이 갑자기 느려졌네요; [5] 형님1935 09/07/20 1935
60029 제 사양에 최신사양의 게임들 잘 돌아갈까요? [3] 마르키아르2143 09/07/20 2143
60028 usb메모리 추천 부탁드립니다. [2] 라이디스1702 09/07/20 1702
60026 피지알에 컴퓨터 고수님이 많으신거 같아서 견적 문의합니다. [3] 그대가있던계1559 09/07/20 1559
60025 가평쪽 계곡 어떤가요? [2] 꼬비2257 09/07/20 2257
60024 피쟐 글의 끝에있는 +는 무엇인가요? [4] 하나1761 09/07/20 1761
60023 오일펜스의 원리가 어떻게 되나요?? [1] 이디어트2738 09/07/20 2738
60022 다들 타자실력 어느정도 되시나요? [36] 이슬먹고살죠11665 09/07/20 11665
60021 혹시 모근제거기를 사용중이시거나 써보신분들 계시나요? [9] 언뜻 유재석5003 09/07/20 5003
60020 닭가슴살은 어디서 구하나요? [19] 동료동료열매2573 09/07/20 2573
60019 컴퓨터가 저절로 꺼진다음 부팅을 시도하면 이런 화면이 뜹니다. [5] MayBee2145 09/07/20 2145
60018 C++ 포인터를 이용한 계산 문제 질문입니다. [7] DEICIDE1867 09/07/20 1867
60017 부동산 관련 질문입니다.(청약관련) [3] [暴風]올킬1733 09/07/20 1733
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로