http://topic.csdn.net/u/20080922/13/60e16c28-d829-41da-9b86-35c90d8d3963.html
int * p;
p的确有空间,正如一个整型变量需要占用空间一样,指针变量也要占用空间。
可关键在于这个空间存放的什么?
整型变量的空间中存放着一个整数,指针变量的空间中则存放一个地址!
int a = 10000;
int * p = &a;
这样就有为a分配一个空间,里面存放了10000;
为p分配了一个空间,里面存放了a的地址(e.g 0x013024,呵呵)
(实际上,地址本身就是用整数表示,你可以printf("%d", (int)p);试一下喽)。
而malloc是什么意思呢,malloc实在程序动态运行的时候,在堆区heap中获取一块空间。
原型如下——
#define size_t unsigned int
void * malloc(size_t size);
你传进去个size,就可以获取size个字节的空间,然后返回一个void *指针,这个指针指向了这块新分配的空间
(也就是这个指针中的地址值为这块空间的首地址)
int * p = (int *)malloc(sizeof(int));
如上是动态创建一个int变量的程序。
这样,p中存放了malloc分配的空间的首地址,继而利用这个首地址访问malloc分配的空间。