Re: [問題] 關於指標
看板C_and_CPP (C/C++)作者loveme00835 (最愛朴素妍)時間15年前 (2010/10/23 16:55)推噓15(15推 0噓 15→)留言30則, 6人參與討論串4/6 (看更多)
※ 引述《vm6jp6rmp4 (Jun)》之銘言:
: 請容許各位大大再讓我問個問題,我指標真的有點弱
: #include <stdio.h>
: #include <stdlib.h>
: #include <string.h>
: void swap(char *y,int len)
: {
: printf("y=%p\n",&y);
: char temp;
: temp=*(y+len-1);
: *(y+len-1)=*(y);
: *y=temp;
: }
: int main(void)
: {
: char x[]="Hello";
: char *z=x;
x["Hello"];
↑
z┘
: printf("x=%p\n",x);
: printf("z=%p\n",z);
如果直接把 x 當指標來用, 他的值實際上就是 &x[0],
所以上面兩者相同
: int len=strlen(x);
: swap(z,len);
┌y
↓
x["Hello"];
↑
z┘
你仔細看 y 跟傳進去的 z 是一樣型態, 所以他們都是
指到 x 陣列中第一個字元的位置, 而 &y只不過是另一
個變數的位址而已, 對這個問題並沒有多大關係.
記得國中數學老師對我們說 :
「畫圖可以解決所有的問題」
現在還是深信不疑... 甭想那麼多, 動筆下去畫就對了!
: printf("%s",x);
: system("pause");
: }
: 關於這個程式我,我假設X開頭位置是2000,假設z的位置是2010並指向2000這個起始位置
: ,y指向z的位置2010,但為什麼y可以更改x的內容呢?並沒有把y設成指標的指標**y
: 另外若把z拿掉,改成swap(x,len),一樣得到同樣結果?若有人能幫我離清這指標的指標
: 真是感激不盡!
--
◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去
████◤ ██ ◢██◣█ ██ ████ ██ s ~> T-ara
█/███ ██ ██ ██ █/█ ◢███ █/█ 歡迎您的光臨
████◤ ██ ██ ██ ██◤ ███◤ ██◤ 恩靜、智妍、孝敏
█/███ ██ █/██◤ ██ █/██ ██ 素妍、居麗、寶藍
████◤ █◤ ◥██◤ █◤ ████◤█◤ ψmakigoto123
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
推
10/23 17:01, , 1F
10/23 17:01, 1F
推
10/23 17:16, , 2F
10/23 17:16, 2F
→
10/23 17:17, , 3F
10/23 17:17, 3F
推
10/23 17:23, , 4F
10/23 17:23, 4F
推
10/23 17:25, , 5F
10/23 17:25, 5F
推
10/23 17:26, , 6F
10/23 17:26, 6F
推
10/23 17:27, , 7F
10/23 17:27, 7F
→
10/23 17:27, , 8F
10/23 17:27, 8F
→
10/23 17:29, , 9F
10/23 17:29, 9F
→
10/23 17:30, , 10F
10/23 17:30, 10F
推
10/23 17:36, , 11F
10/23 17:36, 11F
→
10/23 17:36, , 12F
10/23 17:36, 12F
→
10/23 17:37, , 13F
10/23 17:37, 13F
推
10/23 17:42, , 14F
10/23 17:42, 14F
你無法確定那個字元物件是否於 string 變長之後還存
在, 存取資料應該用該類別的介面來存取([] 或是迭代
器)
→
10/23 17:44, , 15F
10/23 17:44, 15F
※ 編輯: loveme00835 來自: 140.121.197.115 (10/23 17:48)
推
10/23 17:47, , 16F
10/23 17:47, 16F
→
10/23 17:48, , 17F
10/23 17:48, 17F
string::iterator 可以達成你要的功能, 雖然其操作跟
隨機存取指標很像, 但是實際上有可能不是
※ 編輯: loveme00835 來自: 140.121.197.115 (10/23 17:50)
→
10/23 17:51, , 18F
10/23 17:51, 18F
→
10/23 17:51, , 19F
10/23 17:51, 19F
推
10/23 17:52, , 20F
10/23 17:52, 20F
→
10/23 17:52, , 21F
10/23 17:52, 21F
記住一點: 字串的大小如果有變, 所有的迭代器都可能
因為記憶體重配置而失效, 所以每次存取都
要呼叫 begin/end 再算一次
※ 編輯: loveme00835 來自: 140.121.197.115 (10/23 17:58)
推
10/23 18:00, , 22F
10/23 18:00, 22F
→
10/23 18:02, , 23F
10/23 18:02, 23F
→
10/23 18:03, , 24F
10/23 18:03, 24F
推
10/23 18:05, , 25F
10/23 18:05, 25F
推
10/23 18:07, , 26F
10/23 18:07, 26F
推
10/23 18:10, , 27F
10/23 18:10, 27F
→
10/23 18:11, , 28F
10/23 18:11, 28F
→
10/23 18:11, , 29F
10/23 18:11, 29F
推
10/23 18:13, , 30F
10/23 18:13, 30F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章