作者o07608 (無良記者)
看板C_and_CPP
標題[問題] 請問指標指到陣列的問題
時間Sat Jan 12 19:55:56 2013
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++ 2010
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
iostream
問題(Question):
我是個剛開始自學 C++不久的新手
最近在練習 pointer的觀念及用法,參考書裡有提供範例程式可以練習
其中一個是利用指向陣列的指標萊計算輸入的字元數目
程式本身沒問題,但我對於它最後計算字元的概念(詳見下方程式)不太了解
程式用一個 char指標 pbuffer指到一個 char陣列 buffer開頭的位址
輸入的字元用cin.getline存到陣列裡
並用一個while迴圈讓pbuffer指的位址不斷增加直到碰到 '\0'停止
最後程式把buffer裡存的字元全部印出來
並用一條算式 "pbuffer - buffer" 來得到所輸入的字元數
我對這裡的觀念不太了解,為何位址能夠減掉一串字元而得到正確的數字呢?
因此我想看看 pbuffer和 buffer在剛宣告時、計算完要印出結果前及程式最後的值
一開始兩邊都是亂碼,程式中間和最後,pbuffer都沒有值出來,只有buffer有
結果只得到更多的疑問......
希望版上的高手們能替我解惑,感謝
餵入的資料(Input):
都可以,這裡先輸入123456
結果(Output):
昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍
昍昍昍昍昍P
昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍昍
昍昍昍昍昍P
Enter a atring of less than 80 characters:
123456
123456
The string "123456" has 6 characters.
123456
請按任意鍵繼續 . . .
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
const int MAX = 80;
char buffer[MAX];
char* pbuffer = buffer;
cout << pbuffer << endl; //這行是我自己加進去想看pbuffer和buffer
cout << buffer << endl; //一開始印出來的東西,和整體程式沒關係
cout << endl
<< "Enter a atring of less than "
<< MAX << " characters:"
<< endl;
cin.getline(buffer, MAX, '\n');
while(*pbuffer)
pbuffer++;
cout << pbuffer << endl; //這行是我自己加進去想看pbuffer和buffer
cout << buffer << endl; //經過程式後印出來的東西,和整體程式沒關係
cout << endl
<< "The string \"" << buffer
<< "\" has " <<
pbuffer - buffer << " characters.";
cout << endl;
//這裡不知道為什麼能相減得到答案0.0
cout << pbuffer << endl; //這行是我自己加進去想看pbuffer和buffer
cout << buffer << endl; //在程式最後印出來的東西,和整體程式沒關係
return 0;
}
補充說明(Supplement):
有人知道進版動畫會不會停嗎0.0? 上次我等了幾分鐘,不耐煩就方向鍵掉了......
--
我是.漫吐版版眾.歐.零.七.六.零.八!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.27.23.168
推 CP64:都 while(1) 了怎麼自己停 01/12 19:58
對吼 囧
→ linotwo:指標相減會得到指標之間的"差",單位是元素的個數。 01/12 20:29
→ MOONRAKER:pbuffer最後會指到字串尾巴'\0'當然什麼都不會印出來 01/12 20:30
→ linotwo:buffer 是陣列,取出其值會得到指向陣列開頭的指標。 01/12 20:30
→ MOONRAKER:而字串尾巴-字串頭不就是長度了 01/12 20:30
→ linotwo:開頭的指標差結尾六個元素,所以相減的得到六。 01/12 20:32
懂了,感謝!
※ 編輯: o07608 來自: 114.27.23.168 (01/12 20:56)