Saturday, 8 August 2015

Ask questions to Boot


*a = 1 則 a 裡面是位址
如果 *a = b
則令a所指向位址的值為b
如果 *a = &b 代表 a所指向的位址的值為b的位址


* 跟 & 是可以拆解的*a = b
*(a) = b 代表 a的位址的所存的數值 = b

**a = b

**a = b *(*a) = b

可以令 *a = c


*c = b

可以如此拆開

去洗澡

約10~15分鐘回
cl3
我也需要想一下

.
那為什麼void bubble(int* bu)這樣的function
呼叫時寫bubble( &a[0][0] );沒問題?

陣列在記憶體中的表示方式是甚麼??

那二微陣列在記憶體中又怎麼表示

如果宣告

int a[10]

如果另 *b = a時 代表甚麼ˋ意思

如果另 *b = &a[0]又代表甚麼意思

---------------------------------------

上面的問題

有個解決的方式

講錯

有個實驗的方法

那就是

用 printf 印出 記憶體的位置 及數值

你可以去列印在螢幕上面看看
int* aptr = &a[0];是對的 可是int* aptr = a[0];是錯的 int* aptr = &a;是錯的 要nt* aptr = &a;才是對的
我寫錯

最後一個

寫錯了
int* aptr = a;
可是還是不太懂
所以陣列的表示法跟述職的表示法不一樣

陣列在記憶體中

是代表連續的記憶體空間

當你宣告 int a[10]的時候

他給你了 10個記憶體空間而已嗎??

不對

他還給你了一個指標 指向陣列的第一個位址

就是 a

a代表陣列的第一個位址



指向a[0]

所以 a = &a[0]

*a = a[0]
喔喔

你可以試試看 去宣告

a[2] = { 11, 12 }

然後印出 a

印出 *a

印出 *(a+1)

最後一行的印法比較詭異

最後一行是C語言比較麻煩的地方
了解了

容易搞混

去試試案
我有試過


這樣應該沒問題了~
我最近寫的
沒想到還是有東西搞混了
謝謝鈽鈽

用一堆指標

= =+
這樣不好嗎?

等到玩到struct 和 memory alloc 之後

你就會覺得很好玩了
是唷

在這之前

盡量把C的記憶體搞懂

要先弄懂記憶體儲存的模式 才能玩得起C
在甚麼之前?
在弄懂memory alloc的時候應該就會比較懂C的既已儲存模式了吧?

通常把計算機組織 OS 、系統程式 念過之後 才會比較懂

在這之前 就只能盡力想像了
有人推薦我一本書
ComputerSystemsAProgrammerProspect
你覺得要甚麼時候看?

沒看過

不知道
恩恩
謝謝鈽鈽 我比較有力氣了








No comments:

Post a Comment