스트링 포인터 어레이에 관한 초보 질문
글쓴이: ianryu / 작성시간: 수, 2012/07/18 - 7:24오전
메인에서 포인터 어레이를 선언하고 그 포인터 어레이에 새로운 이름의 주소를 넣는 함수-void addNames(string* arr[], int* size, string name)와 더해진 이름을 하나의 스트링으로 모아 반환하는 함수-string displayNames(string * arr[], int* size)를 만들고 있습니다. 제가 포인터 감이 잘 안잡히는 부분들이라 조언 부탁드립니다. 코드는 아래와 같습니다.
(참고로 size는 더해진 이름의 갯수입니다, 그리고 선언된 변수, 파라메터는 고치치 않고 진행하고 싶습니다.
void addNames(string* arr[], int* size, string name){
names[*(size)] = &(new_name);
*(size)++;
}//이 코드만으로 충분한지 잘 모르겠습니다.
string displayNames(string* arr[], int* size){
//더해진 모든 이름을 하나의 스트링으로 합쳐 반환
}
int main(){
string* names[10];
int x = 0;
int* size = &(x);
string new_name = "";
cout<<"input new name: ";
cin>>new_name;
addName(names, size, new_name);
cout<
return 1;
}
감사합니다.
Forums:
1 #include 2 #include 3
1 #include
2 #include
3
4 using namespace std;
5
6 void add(string *names, int *size, string name) {
7 names[(*size)++] = name;
8 }
9
10 void display(string *names, int *size) {
11 for (int i=0; i<*size; i++) {
12 cout << names[i] << " ";
13 }
14 cout << endl;
15 }
16
17 int main() {
18 string names[10];
19 int size = 0;
20 add(names, &size, "hello");
21 display(names, &size);
22 add(names, &size, "world");
23 display(names, &size);
24 return 0;
25 }
char* 로 스트링을 저장하실게 아니라면
char* 로 스트링을 저장하실게 아니라면 string *names[] 이렇게 하실필요 없구요
그냥 간단하게 하면 이렇게 되네요.
일단 가장 간단히 말해서 알아두실건 array를 가리키는 변수는 (기본적으로)포인터 이고요
포인터를 쓰는 가장 중요한 이유는 값을 전달한다기 보다는 이 값을 바꾸기 위해 이 값을 가리키는 보내어 얘를 통해 값을 변경하는 거라고 알아두시면 되겠네요
예로, 그냥 3이라는 숫자를 보내면 이 값에 계산을 하여 결과값을 알려주는 것이 포인터를 쓰지 않는 방법이라면
포인터를 사용한 방법은 3만 대답하는 놈을 보내어, 여러가지 알고리즘을 통한 주입식교육으로 다른 값을 뱉어네게 만든뒤, 이놈을 돌려보내는 겁니다.
감사합니다. ^^
포인터에 대한 마지막 설명 이해하기 쉽고 좋습니다. 감사합니다.
한가지 추가 질문 드리면 제가 코드에 쓴대로 cin>>new_name으로 이름을 매번 입력받아서 처리한다고 한다면
포인터어레이(names[10])에 계속 같은 주소로 들어갑니다. (스택에서 생성되고 또 같은 자리에 cin으로 받고 하는듯 합니다)
그럼 이렇게 반복될 때 피하는 방법은 뭐가 있을까요? new 해서 힙에 new_name을 생성하는 방법 뿐일까요?
20 add(names, &size,
20 add(names, &size, "hello");
21 display(names, &size);
22 add(names, &size, "world");
23 display(names, &size);
제가 드린 이 부분을
while(true) {
cout << "input: ";
cin >> new_name;
add(names, &size, "hello");
display(names, &size, "hello");
}
로 바꾸시면 됩니다. 루프로 인하여 계속 인풋을 받게 하는 것입니다
댓글 달기