討論區快速選單
知識庫快速選單
程式設計俱樂部Facebook粉絲團 網路投保旅行平安險 討論區最近新進100則主題
[ 回上頁 ] [ 討論區發言規則 ]
字串指標的應用
更改我的閱讀文章字型大小
作者 : phoebus7(小P) 貼文超過200則人氣指數超過30000點
[ 貼文 407 | 人氣 43340 | 評價 690 | 評價/貼文 1.7 | 送出評價 121 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/1/18 下午 08:43:48
#include <iostream>
using namespace std;

int main()
{
    string temp;
    string* str[3];
    
    for(int i = 0;i < 3;i++)
    {
     getline(cin,temp);
     str[i] = &temp;
     cout << "temp = " << temp << endl
     << "&temp = " << &temp << endl;
    }
    cout << endl;
    for(int i = 0;i < 3;i++)
    {
     cout << "str[" << i << "] = " << *str[i] << endl
     << "&str[" << i << "] = " << str[i] << endl;
    }
    system("pause");
    return 0;
}
如果使用上述的寫法 str[i] = &temp ,那麼因為都指向temp的位置,所以顯示出來都是最後輸入的值
但是又沒辦法寫成 *str[i] = temp , 那麼請問該如何只使用一個暫存字串變數(temp)解決呢?

另外我想再請問,如果想要用下列的寫法,該如何寫才不會有問題呢?
for(int i =0;i < 3;i++)
    {
     getline(cin,str[i]); //我知道不應該放 str[i] , 但是寫成 *str[i] 也無法正確執行
    }
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/1/18 下午 11:19:18
你需要 N 個物件, 就用大小為 N 的「物件陣列」. 所以你應該寫:
  std::string str[3];

  for (int i = 0; i < 3; ++i)
  {
    std::getline(cin, str[i]);
  }

而不是「指標陣列」.

作者 : phoebus7(小P) 貼文超過200則人氣指數超過30000點
[ 貼文 407 | 人氣 43340 | 評價 690 | 評價/貼文 1.7 | 送出評價 121 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/1/18 下午 11:38:05
所以指標陣列無法像物件陣列那樣子使用囉?
作者 : gn00446610(烈日神川)
[ 貼文 119 | 人氣 0 | 評價 290 | 評價/貼文 2.44 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人phoebus7註記此篇回應為很有道理 2011/1/19 上午 02:30:33
#include <iostream>
using namespace std;

int main()
{
    string temp;
    string* str[3];
    
    for(int i = 0;i < 3;i++)
    {
     getline(cin,temp);
     str[i] = &temp;
     cout << "temp = " << temp << endl
     << "&temp = " << &temp << endl;
    }
    cout << endl;
    for(int i = 0;i < 3;i++)
    {
     cout << "str[" << i << "] = " << *str[i] << endl
     << "&str[" << i << "] = " << str[i] << endl;
    }
    system("pause");
    return 0;
}
============================================================================
針對樓主的code,小弟有兩個問題:
1.
>>for(int i = 0;i < 3;i++)
>>{
>> cout << "str[" << i << "] = " << *str[i] << endl << "&str[" << i << "] = " << str[i] << endl;
>>}
你想表達的,跟你輸出的是否有所出入?
str[i]=*str[i]?
&str[i]=str[i]?
這是什麼東西呢?
2.
>>另外我想再請問,如果想要用下列的寫法,該如何寫才不會有問題呢?
>>for(int i =0;i < 3;i++)
>>{
>> getline(cin,str[i]); //我知道不應該放 str[i] , 但是寫成 *str[i] 也無法正確執行
>>}
根據你在code的裡面宣告的,你的str[i] 的型態是string*,你先想清楚所以你的str[i]到底存的是什麼?假設今天你如果要放一的佔空間的東西,你是不是應該要先找出一塊空間給他放?
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人phoebus7註記此篇回應為最佳解答 2011/1/19 上午 04:16:44
>所以指標陣列無法像物件陣列那樣子使用囉?

你知道指標是什麼嗎?

每個物件都佔有空間, 指標就是用來存放某物件所佔空間的位址.

打個比喻, 物件相等於你的房子, 指標就相等於一個寫了你房子地址的信封. 「信封」是指標本身, 信封上的地址就是指標的內容.

房子可以住人, 信封能住人嗎?

作者 : phoebus7(小P) 貼文超過200則人氣指數超過30000點
[ 貼文 407 | 人氣 43340 | 評價 690 | 評價/貼文 1.7 | 送出評價 121 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/1/19 下午 10:45:21
經過各位的指點,我大概了解到我自己的問題在哪裡了
一直以來指標這部分都學得不是很扎實...
謝謝指教~
 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 13050 
2 青衫 4760 
3 simula 4690 
4 coco 4030 
5 白老鼠(Gary) 3670 
6 ozzy 2540 
7 Ben 2250 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1560 
C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.15625