스트링 포인터 어레이에 관한 초보 질문

ianryu의 이미지

메인에서 포인터 어레이를 선언하고 그 포인터 어레이에 새로운 이름의 주소를 넣는 함수-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;
}
감사합니다.

onhachoe의 이미지

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 }

onhachoe의 이미지

char* 로 스트링을 저장하실게 아니라면 string *names[] 이렇게 하실필요 없구요
그냥 간단하게 하면 이렇게 되네요.

일단 가장 간단히 말해서 알아두실건 array를 가리키는 변수는 (기본적으로)포인터 이고요
포인터를 쓰는 가장 중요한 이유는 값을 전달한다기 보다는 이 값을 바꾸기 위해 이 값을 가리키는 보내어 얘를 통해 값을 변경하는 거라고 알아두시면 되겠네요

예로, 그냥 3이라는 숫자를 보내면 이 값에 계산을 하여 결과값을 알려주는 것이 포인터를 쓰지 않는 방법이라면
포인터를 사용한 방법은 3만 대답하는 놈을 보내어, 여러가지 알고리즘을 통한 주입식교육으로 다른 값을 뱉어네게 만든뒤, 이놈을 돌려보내는 겁니다.

ianryu의 이미지

포인터에 대한 마지막 설명 이해하기 쉽고 좋습니다. 감사합니다.
한가지 추가 질문 드리면 제가 코드에 쓴대로 cin>>new_name으로 이름을 매번 입력받아서 처리한다고 한다면
포인터어레이(names[10])에 계속 같은 주소로 들어갑니다. (스택에서 생성되고 또 같은 자리에 cin으로 받고 하는듯 합니다)
그럼 이렇게 반복될 때 피하는 방법은 뭐가 있을까요? new 해서 힙에 new_name을 생성하는 방법 뿐일까요?

onhachoe의 이미지

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");
}

로 바꾸시면 됩니다. 루프로 인하여 계속 인풋을 받게 하는 것입니다