Re: [問卦] C++到底難學在哪裡

作者: a1e (我上了賊船了囧)   2023-03-05 15:42:23
※ 引述《tatty5566 ( )》之銘言:
: 看到標題我就想問,C++是不是沒那麼適合新手學啊?
: 我資工大一上程設就C++,那時候用的是螞蟻書
: 之後不知道是我沒天分,還是教授講太爛,
: 學期中講到pointer我就聽不懂,直接斷然轉學
指標不熟,單純就是練的不夠多,練多了就會知道這東西是什麼
你只看書上描述當然看不懂,直接跳下去寫就知道了
例如
int main()
{
int temp[5];
for(int i=0;i<5;i++){
temp[i]=i+1;
printf("temp[%d]=%d\r\n",i,temp[i]);
}
return 0;
}
這簡單的陣列填值,看不懂的就不要學寫程式了,快點轉行
把指標加上去
int main()
{
int temp[5];
int *p;
p = &temp[0];
for(int i=0;i<5;i++){
*(p+i)=i+1;
printf("temp[%d]=%d\r\n",i,temp[i]);
printf("p+%d=%d\r\n",i,*(p+i));
}
return 0;
}
會發現為什麼我只是往指標寫值進去,陣列沒動作,陣列數字跟著一起動
因為指標就是直接把開頭位址,指到你指定的記憶體位址
上面那個例子指到陣列第0個位址去了,後面+1就是每次移動4個byte
(指標宣告為int,int是4個byte,每次+1就是移動4個byte位址)
當然就會跟著把陣列塞滿
程式運作就像下面這樣
temp
0 1 2 3 4
^ ^ ^
| | |
p p+1 p+2
你指標跑完,陣列也填完數字了
指標後面還有一堆操作,基本邏輯就是記憶體位址操作
例如你要寫一個程式,你每次寫進去的資料量不一樣,這次寫10筆,下次15筆..etc
你如果宣告一個長度100的陣列,有次資料要寫101筆,你就爆了
最簡單的解決方法就是直接建一個超大的陣列,例如長度100000
你怎麼寫都不可能超過這個大小就沒事
但如果你的硬體記憶體不夠,你只能用指標,讓他可以浮動的一直寫下去(除非記憶體
被用完)

Links booklink

Contact Us: admin [ a t ] ucptt.com