首先你要明白什么是指针,指针是用来操作内存的.那么指针又如何操作内存呢?在C语言里可以定义指针变量,这个指针变量里可以存储内存的地址,一个32位的无符号整型值.它就像普通的int, double型变量一样.以下面为例说明:
int iMax = 1;
int * pMax = NULL;
我们定义了一个int型的变量iMax 和一个int型的指针变量pMax,并对他们进行了初始化.这里iMax的值为1; pMax的值为NULL,也就是一个无符号整形0.注意NULL是一个宏,代表0.现在pMax的值为NULL,一般来讲0也是一块内存地址, 我们也可以操作.注意这个NULL你现在认为他表示无效即可.用来给指针进行初始化.其它的先不用管.
现在我们来使用pMax, 如果要使用pMax, 那么就要对pMax赋值,使它指向一块内存.我们这里定义指针的类型为一个指向一个int型值的指针变量.所以可以将iMax的地址赋值给pMax.注意,不管什么样的类型的指针变量,其值都是一个unsigned int型的值,表示内存的地址.理解这一点很重要.为什么需要定义指针所指向的类型呢.如 char *, int * , double *型的指针,原因是我们使用指针是为了操作存储在内存中的特定类型的值.如果没有定义指针的类型,那我们在操作内存时,只能一个字节, 一个字节使用.这样的指针没有什么意义,也许你还不太理解.但多应用就能明白这一点.
现在我们来给pMax赋值,然后操作它.
pMax = &iMax;
好了,可以使用pMax了.就像使用iMax一样用它.不过你得在它前面加个指针运算符'*';
*pMax = *pMax + 2;
现在的pMax指针变量中存储的是iMax变量地址的值.对*pMax操作, 就是对iMax操作.现在*pMax = 3 , iMax = 3;
如果说我临时需要一块内存,这块内存用来存储n个int的变量.我就需要使用malloc为pMax分配一块内存.可以这样做:
pMax = malloc(sizeof(int) * n);
if (pMax == NULL) // 错误处理
{ TODO...}
这样我们就为pMax分配了一块内存大小为sizeof(int) *n 字节的内存.这里malloc返回一个指向这块内存的首地址并将它赋给了int型指针变量pMax.
好了,pMax已经可以使用了.我们需要对它进行初始化.这个可以使用memset函数
memset(pMax, 0 , sizeof(int) * n);
现在就可以像数组一样操作这块int型的内存了.
pMax[0] = iMax;
pMax[1] = iMax + 1;
pMax[2] = pMax[0];
...
总的来说,指针非常灵活.因为它可以直接操作内存.这就会使指针这个东西很不容易控制.
像你说的p = temp ;将数组的首地址赋值给p , 这样只是为了更容易操作字符串.temp也表示字符串的首地址, 但他是一个不可改变的量,即不能对temp赋值,它是只读的.指针p就不同了,他可以进行一些数学运算.
对一个程序来讲,如果你临时需要一块内存来存储数据,你可以使用malloc, 但记得要free.否则容易造成内存泄露.
就这些吧. 希望对你有用.写这么多也不容易,给点分吧.^_^