線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2274
推到 Plurk!
推到 Facebook!

指標和陣列觀念

答題得分者是:ikk
newC
一般會員


發表:1
回覆:1
積分:0
註冊:2008-03-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-03-26 23:14:24 IP:61.216.xxx.xxx 未訂閱
剛接觸指標跟陣列...請問底下程式,為什麼我cout arr會印出記憶體位址,可是cout test卻是印出陣列值abc?
[code cpp]
int arr[3] = {0};
cout << "arr :\t\t" << arr << endl;
cout << "&arr[0]: \t" << &arr[0] << endl;
cout << "&arr[1]: \t" << &arr[1] << endl;

char test[3] = {'a','b','c'};
cout << "test :\t\t" << test << endl;

[/code]

指標問題...
為什麼f跟tt的記憶體位址不一樣? *tt已經指向f了
[code cpp]
char f[6] ="aaaaaa";
char *tt = f;
cout << &f << endl <<&tt;
[/code]


為什麼int可以&取址,但是char就不行呢? int的指標跟char有什麼不一樣?
[code cpp]
int i =10;
int *j = &i;

cout << &i << endl;
cout << j << endl;

char c = 'c';
char *p = &c;

cout << &c << endl;
cout << p << endl;

[/code]
編輯記錄
newC 重新編輯於 2008-03-26 23:21:09, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-03-27 17:14:29 IP:140.116.xxx.xxx 訂閱

1. arr 是一個指標, 指向arr[0]的位址.
test 也是一個指標, 而字串剛好是用指標當陣列.

2. tt是你產生的一個指標, 這個指標是真實存在的放在一個位址上.
所以f 和 tt的位址是不一樣的, 沒錯.
真正一樣的是tt的存放值, 是指向f.
&f == *t;

3. 你確定不能取? 試過是可以執行的.

===================引 用 newC 文 章===================
剛接觸指標跟陣列...請問底下程式,為什麼我cout arr會印出記憶體位址,可是cout test卻是印出陣列值abc?
[code cpp]
int arr[3] = {0};
cout << "arr :\t\t" << arr << endl;
cout << "&arr[0]: \t" << &arr[0] << endl;
cout << "&arr[1]: \t" << &arr[1] << endl;

char test[3] = {'a','b','c'};
cout << "test :\t\t" << test << endl;

[/code]

指標問題...
為什麼f跟tt的記憶體位址不一樣? *tt已經指向f了
[code cpp]
char f[6] ="aaaaaa";
char *tt = f;
cout << &f << endl <<&tt;
[/code]


為什麼int可以&取址,但是char就不行呢? int的指標跟char有什麼不一樣?
[code cpp]
int i =10;
int *j = &i;

cout << &i << endl;
cout << j << endl;

char c = 'c';
char *p = &c;

cout << &c << endl;
cout << p << endl;

[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
newC
一般會員


發表:1
回覆:1
積分:0
註冊:2008-03-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-03-27 21:02:34 IP:61.216.xxx.xxx 未訂閱
1.我不懂這句意思..."字串剛好是用指標當陣列"...

2.如果&f == *t是一樣,那為什麼cout &f和*t出來的值不一樣

3.可以執行,但是cout出來不一樣,一個有印出記憶體位置,一個印出類似亂碼符號。

===================引 用 ikk 文 章===================

1. arr 是一個指標, 指向arr[0]的位址.
test 也是一個指標, 而字串剛好是用指標當陣列.

2. tt是你產生的一個指標, 這個指標是真實存在的放在一個位址上.
所以f 和 tt的位址是不一樣的, 沒錯.
真正一樣的是tt的存放值, 是指向f.
&f == *t;

3. 你確定不能取? 試過是可以執行的.

ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-03-28 09:13:52 IP:140.116.xxx.xxx 訂閱
1.就是說直接拿指標來輸出, 會印出字串內容.
2.sorry, 我要更正一下, 我回答的有問題, 真正要看指標指向的位址是用, cout<<"&f="<<&f<<"; *(&t)="<<*(&t)< 也就是說看指標t真正存放的值, 也就是f的位址.
要cout出一樣值, 必須用 cout<3.在我電腦印出是相同的, 但是因為只有一個字元, 不是以'\0'當結尾, 所以在印出第一個字元後, 並不會立即停止列印.
而是遇到'\0'才停止, 所以這樣的寫法有很嚴重的問題.

===================引 用 newC 文 章===================
1.我不懂這句意思..."字串剛好是用指標當陣列"...

2.如果&f == *t是一樣,那為什麼cout &f和*t出來的值不一樣

3.可以執行,但是cout出來不一樣,一個有印出記憶體位置,一個印出類似亂碼符號。

===================引 用 ikk 文 章===================

1. arr 是一個指標, 指向arr[0]的位址.
test 也是一個指標, 而字串剛好是用指標當陣列.

2. tt是你產生的一個指標, 這個指標是真實存在的放在一個位址上.
所以f 和 tt的位址是不一樣的, 沒錯.
真正一樣的是tt的存放值, 是指向f.
&f == *t;

3. 你確定不能取? 試過是可以執行的.

------
FPGA驗證, FPGA開發平台, http://smims.com
系統時間:2024-04-25 14:18:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!