| 
 | 
 
 
发表于 2012-9-1 18:56:19
|
显示全部楼层
 
 
 
呵呵  楼主,对于全面的指针深入解析,我认为一时间是说不清楚的,毕竟c的精华,岂是三言二语?  呵呵  下面的个人解说  希望能帮助你, 如有错误,在此道歉。 
 
首先,问题一: int *p[n];和int (*p)[n] 
 
分析:  你看第一个  int *p[n]   你在看看这个int p[n];   这两个有共同之处,   就是p为数组。有n的元素 。   而不同之处 在于,   int *p[n]  是表示 p为数组,含n个元素, 每个元素为int指针(强调哦,每个都为int型的指针),int p[n] 是表示 p为数组,含n个元素, 每个元素为int类型。  那么我们看看这 int(*p)[n] 
p为指针,指向的由n个int类型变量数构成的数组.  也就是说  他们最大的区别在于  一个是数组的类型。 而另一个是指向一个数组 (对于举例,犹豫篇幅的问题,所以我只能列出很简单的  在此表示歉意) 
比如: 
           int a[3] = {0,1,2};    //定义一个 整形数组a  有三个元素 分别是 a[0],  a[1],  a[2] 
           int *p1[3]={%a, %b, %c}  //假设 前面定义了 3个 变量 a b c  呵呵,抱歉   没能写详细 
           int (*p)[3]=%a       // 这里是取 int p[3]的地址,  看清楚是int a[3]哦  而不是 int *p1[3] 想一想为什么? 
 
问题二:int *p()和int (*p)() 
   
分析 :int *p() 指针函数   无参数,强调指针, 不是普通函数  与 int p()不同 (  int *p( int x )  这样就是有参数了~) 
而 int (*p)()  是一个int类型的无参数的函数指针,它指向的是一个函数 
其实就是   一个是  函数 (指针函数)   一个是  变量 (指向函数的变量。  指针) 
比如: 
         int *p                       //定义一个 指针  (指向函数的指针    也就是函数指针) 
         int a(int x);       //定义一个 p 函数 
         p = a                       //好好想想为什么不用加 &      如果想不到请联系我   我的个人资料有我qq 
         int *p(int x);      //定义了   一个指针函数   带形参  int型 
         
问题四: **p 什么意思  这样理解对不对?**p和*p有什么区别? 
 
分析:指向指针的指针,是真确的  呵呵书本上的把,  呵呵 下面我以我的解释来说, 希望你能明白 
 
呵呵  , 这是我的比喻~   
 
       一把箭上有二个相同的爱心,   分别是 爱心1, 爱心2 (  爱心1   体积大于爱心2  切记  ~    这样是为了让你好分辨,不至于晕了~ ),   好, 现在你看,  爱心1 与  爱心2  由于箭头是朝右的,  那么  这s时不正是  爱心1 指向  爱心2 吗 ?  (顺序: 爱心1 爱心2) ,   刚好   爱心1  比  爱心2  体积大  而且能包容 爱心2     现在你想想  **p 与 *P        他们的区别   一个是包容 *p类型的 (也就是说  **p这种类型是 包容指针类型的  如果你 **p = %a (比如 a 整形) 那么就错误了,  因为类型不是一个层次的)    ,  而另一个是指向 普通类型的变量 
 
问题五: 我想楼主是想问 为什么能   p = name + i  把? 
 
我的提示:   呵呵  楼主好好看完我上面的解答, 我相信你能明白, 因为上面看懂了,  这也就自然而然就懂了      当然还有问题  联系我qq   
 
呵呵 ,   楼主  问题总算完了,  虽然我不能说的很生动,很详细      但是希望你能看会,  如果有误的地方请多多包涵,  毕竟我是人么。  不是神  ,  难免一出 ,   希望楼主  多多实验。 
 
好 了       楼主  加油  ~    886 ~ 
 
呵呵 |   
 
 
 
 |