C++ 일차원 배열을 인자로 전달 후 해당 배열의 Size 얻는 방법 (초보주의)


안녕하세요. C++ 초보자입니다.

일차원 배열을 인자로서 보내고 size, item을 얻는 함수와 출력할 print 함수를 만들려고 합니다.

일단 생성자까지는 아는 선에서 만들었지만 이후에 막혀버리네요..

질문은 이러합니다..

  1. int itemsize = sizeof(item) / sizeof(int); 가 왜 1이 출력되는지 모르겠어요. sizeof(int)가 4바이트인건 외워서 알고 있지만 왜 sizeof(item)도 4일까요? int형 기준으로 4*배열 원소의 개수가 size가 되야하지 않을까 싶지만 정작 원소가 4개든 6개든 8개든 출력해보면 모두 1이 출력됩니다. 어떻게 해야할까요?
  2. itemSize가 잘 작동한다고 가정하고 이후에 getsize함수 부분을 작성한다고 하면.. return itemsize을 쓰려고해도 생성자 안에 정의해둔 itemsize 변수를 getsize함수에서 사용할 수 없네요.. 다른 함수에 있는 변수를 사용하려면 어떻게 해야하나요?
  3. (2번과 비슷한 질문) getitem에서 역시 Set생성자 안의 item을 쓰려고 item에 접근하려면 어떻게 해야할까요?
class Set {
private:
    int *set;
    int size = 0;
public:
    Set(int *set, int size);
    int getsize();
    int getitem(int index);
    void print();
};

Set::Set(int *set, int size) { 
    int item = 0;
    for (int i = 0; i < size; i++) {
        item = set[i];
    }
    int itemsize = sizeof(item) / sizeof(int); // 왜 1이 출력..?
}

int Set::getsize() {
//return itemSize?
}

int Set::getitem(int index) {
}

void Set::print() {
}


void main() {
    int a[] = { 3,1,9,10,5,8 };
    int b[] = { 2,4,5,8 };
    Set a1(a, 6);
    Set a2(b, 4);
}

  • 2016년 09월 24일에 작성됨

  • 저도 한 수 배워갑니다    링고   2016.9.26 17:32     
조회수 115


1 답변


좋아요
2
싫어요
채택취소하기

안녕하세요! 이번에도 제가 답변을 달아 드리겠습니다.... ㅎ;

코드에 주석을 달아 설명해 드리겠습니다.

class Set {
private:
    int *set;
    //int size; 필요 없는 변수 입니다. itemsize라는 변수가 생겼기 때문입니다.
    int itemsize;

public:
    Set(int *set, int _size);
    ~Set();
    int getsize();
    int getitem(int index);
    void print();
};

Set::Set(int *_set /* 이름이 같지 않게 사용해 주세요. */, int _size): itemsize(0)// 멤버 변수 초기화 입니다.
{ 
    // int item = 0; 아마 int형 배열을 저장하기 위해 사용하신 것 같습니다.
    //               하지만 실제로는 int형 변수 하나를 선언하신 겁니다. 그리고
    //               생성자 역시 함수 이므로 함수 내부에서 선언한 지역변수는 함수가
    //               끝날때 같이 사라집니다.
    this->set = new int[_size]{0,};

    for (int i = 0; i < _size; i++) {
        //item = set[i]; int형 변수에 저장해봤자 다시 덮어씌우기 때문에 마지막 데이터만 저장 됩니다.
        this->set[i] = _set[i];
    }
    //itemsize = sizeof(item) / sizeof(int); // 왜 1이 출력..?
    // int item 은 4바이트 int형 변수입니다. 따라서 int의 사이즈로 나누면 1이 나옵니다.

    itemsize = _size;    // 어차피 사이즈는 넘겨받으니 그대로 사용 하시면 됩니다.

}

int Set::getsize() {
    return itemsize; // 그대로 사용 하시면 됩니다.
}

int Set::getitem(int index) {
    return this->set[index];
}

void Set::print() {
}

Set::~Set() {
    delete this->set;
}

int main() {
    int a[] = { 3,1,9,10,5,8 };
    int b[] = { 2,4,5,8 };
    Set a1(a, 6);
    Set a2(b, 4);

    return 0;
}

  • 2016년 09월 24일에 작성됨
    C++을 중점으로 배우고 있는 학생입니다. 잘 부탁 드립니다!

  • this->set = new int[_size]{0,}; 부분은 어떤 의미를 갖나요? 클래스의 set변수로 뭔가를 넣어주는 것 같긴한데 뭔지 모르겠네요..{0, } 라고 되어 있는 이 부분은 아예 이해가 가질 않네요..ㅠ    이성우   2016.9.24 17:16     
  • 배열 원소의 개수를 출력하려면 그에 대한 전체 길이를 알아야 합니다. 하지만 그 길이를 구하는 방법을 알기는 어렵습니다. 여러 방법이 있습니다만 애초에 포인터로 배열을 받기 때문에 미리 그 크기를 지정받아야 합니다. 따라서 포인터로, 함수의 인자(매개변수)로 배열을 받을때는 크기를 항상 지정받아야 합니다.    유현호   2016.9.24 17:39     
  • this->set = new int[_size]{0,}; 에서 this->set은 해당 인스턴스클래스(this)의 멤버변수 int *set에 new(동적할당)을 int[_size] 만큼의 길이(int형 _size길이의 배열)를 할당 해 주는 것입니다. 그리고 {0,}는 그 배열의 내부 값들을 모두 0으로 초기화 해주는 것입니다. {0}, {0,}, {0,0,0,0} 등으로 초기화 해 줄 수 있습니다.    유현호   2016.9.24 17:42     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close