定义指针时给指针分配的内存是用来储存指针所指向的地址的(就相当于你去朋友家,你的朋友给了你一张写着门牌号的纸,这张纸就是指针的内存空间)这个储存空间只有几个字节的大小(地址的大小由系统决定),而malloc是申请出一段内存,用来储存数据,申请的内存大小由malloc内的语句决定(malloc申请出的内存相当于你朋友家的房子),你不可能把你朋友一家放到纸里,必须把他们放到房子里(这里的朋友就相当于你要储存的数据)。
定义指针的时候确实会分配,但是是随机分配的,而且这个时候指针是不能使用的,因为你不知道分配的内存在哪,有没有内容,起码需要初始化下才能用。
而malloc后指针会指向heap上的可用空间,这样就算函数被回收,指针还是指向正确的内容,因为指针指向堆上的内容,如果没有那一句malloc,程序会报错uninitialized local variable 'p' used。
有问题可以继续问~
定义的时候没有初始化,p可能不是一个有效的指针。