作者Ducray (賢賢)
看板C_and_CPP
標題[問題] 找記憶體位置
時間Sat Nov 28 21:29:35 2009
遇到的問題: (題意請描述清楚)
我照書上打了同樣一段程式碼,可是結果卻不一樣
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char str[6]="abcde";
char *s;
s=&str[0];
cout <<s<<endl;
system("pause");
return 0;
}
希望得到的正確結果:
書上是cde
程式跑出來的錯誤結果:
我跑出來是abcde
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
visual C++ 2008
為什麼會不一樣嗎?跟電腦有關嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.81.252.192
1F:推 twotwoone:書上印錯 11/28 21:31
2F:→ VictorTom:這個code來說, 印出abcde沒有錯, 如果你程式沒打錯, 就 11/28 21:31
3F:→ VictorTom:是書錯了....@_@" 11/28 21:32
4F:→ Ducray:恩恩,可是書上是直接附圖耶,不是純粹只有文字 11/28 21:33
5F:→ Ducray:那大家都一樣應該就是輸錯了,謝謝 11/28 21:33
6F:→ VictorTom:書上會不會是寫 s=&str[2]; // XD 11/28 21:38
7F:推 softwind:書錯很大... 11/28 21:59
8F:→ devilarise:感覺這裡s=&str[0];的寫法不太好@@這樣是在傳址吧 11/28 22:41
9F:→ devilarise:這樣改了str內容連s的內容都變了, 會誤導新手吧? 11/28 22:43
10F:→ devilarise:很好奇的問一下書名?... 11/28 22:43
11F:→ Ducray:其實我覺得大致上書寫的不錯啦,就是指標部分比較難 11/28 23:15
12F:→ Ducray:請問de大,會誤導是為什麼?可不可以舉例一下.我想知道>謝謝 11/28 23:16
13F:→ softwind:address of str[0] 非常容易理解阿... 11/28 23:17
14F:→ softwind:而且原本承接"abcde"就是array結構 並不是string const阿 11/28 23:18
15F:→ softwind:這樣使用並沒有問題 11/28 23:18
16F:推 VictorTom:同意樓上, 那樣的寫法應該沒有問題, 而且既然沒有 11/28 23:58
17F:→ VictorTom:function call, 怎麼會有什麼傳址的問題?_? 11/28 23:58
18F:→ VictorTom:再說, 把array的address傳入function讀或寫是再基本不過 11/28 23:59
19F:→ VictorTom:的操作, 別說誤導新手, 反而是應該要學會的技巧吧@_@" 11/29 00:00
20F:推 holymars:&str[0]只是有點雞肋而已 就像把char轉型成int明確寫出來 11/29 02:05
21F:推 holymars:比如說char b; printf("%c", (int)b); 類似這種感覺XD 11/29 02:08
22F:→ holymars:printf因為參數列未定,會把整數的實參promote成int 11/29 02:10
23F:→ holymars:compiler會自動作 但是你明確寫出來也不算錯,雞肋而已 11/29 02:10
※ 編輯: Ducray 來自: 140.112.4.93 (02/02 00:34)