c语言为什么用动态分配