指標和陣列觀念 |
答題得分者是:ikk
|
newC
一般會員 發表:1 回覆:1 積分:0 註冊:2008-03-26 發送簡訊給我 |
剛接觸指標跟陣列...請問底下程式,為什麼我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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
1.就是說直接拿指標來輸出, 會印出字串內容.
2.sorry, 我要更正一下, 我回答的有問題, 真正要看指標指向的位址是用, cout<<"&f="<<&f<<"; *(&t)="<<*(&t)< 要cout出一樣值, 必須用 cout< 而是遇到'\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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |