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

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

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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.