指針只是一個指示器,它只具備指向作用,本身不是數據。你定義int *p,或者struct student *s,都只表示指針p或s指向一個應當儲存int或者struct student的數據體,至於那個被指向的數據體是否存在,指針是不知道的。由於你沒有構造這樣的數據實體,那麼p或s指針也只是指針而已,它還不知道指向誰,那個誰是要你自己定義才有的。
構造鏈表時,malloc()的過程,是從內存中申請一個對應的數據實體,比如(int *)p = (int *)malloc()是申請一塊指向int元素的內存塊,把這塊內存的地址賦予給指針p,並且,從此之後,p就承擔這塊內存的入口地址的作用(將來要free(p)釋放,因此這個指針最好不要移動,當作數組名使用是最安全的)。