【問題】【問題】關於指標移動~


Recommended Posts

subject: 關於指標移動~

這題其實是這週資料結構的作業之一...

其中要求我們撰寫一個函數可以使輸入字串反向排序

EX.

input:123456

output:654321

實作如下,已達成老師要求。

-- code --

0001 char *strrev(char *string)

0002 {

0003 int i=0,j;

0004 char temp;

0005 char *ptr=string; //由後往前指標

0006 char *ptr2=string; //前往後指標

0007

0008 while(*ptr++!='\0'){i++;}; //將指標指向最後and計算字串長度

0009 *ptr--; //避免寫到結束字元

0010 *ptr--; //刪掉就不行...怪

0011

0012 i=i/2; //決定交換次數

0013 for(j=0;j<i;j++){

0014 temp=*(ptr2+j);

0015 *(ptr2+j)=*(ptr-j);

0016 *(ptr-j)=temp;

0017 }

0018 return string;

0019 }

--

不懂的是在上述第9行 *ptr-- 卻需要再重複1次才能正確執行

指標移動的單位是1個字元,而字串結尾符號'\0'卻是2個字元???

怎麼算都不會是2個字元....

這詭異的狀況有人知道嗎???

--

Ps. 這篇同時Po於ptt及微風

如解決了再同時修改主題~ (H)

鏈接文章
分享到其他網站
while(*ptr++!='\0'){i++;};

這行 假設一個字元陣列 char x[5]

x[3]='\0'

則當*ptr=='\0' 這時ptr指向x[3] 但跳出迴圈後 ptr會再+1

即跳出迴圈後會指在x[4]的位置

要解決這個問題 可以考慮把ptr++寫到迴圈裡面

了解~ ^^"

發現改成 *(++ptr) 就可以正確執行了~

居然敗在這種地方...

果然基本功沒打好是不行的~:|

鏈接文章
分享到其他網站

請登入後來留意見

在登入之後,您才能留意見



立即登入