鱼C论坛

 找回密码
 立即注册
查看: 3783|回复: 7

关于指针的一大堆问题

[复制链接]
发表于 2012-9-1 18:56:18 | 显示全部楼层 |阅读模式
15鱼币
1.
int i;               整形变量
int *p;            指针变量
int a[n];         数组
int *p[n];       指针数组
int (*p)[n];   (请问是不是数组指针)
int f()            函数
int *p()         指针函数
int (*p)()       函数指针
int **p          指向指针的指针
2.请问int *p[n];和int (*p)[n];  有什么区别 最好是举例(程序)说明!
是不是说*p不能改变 而 (*p)可以加1=p+1二维数组 最好是拿程序说明
3.请问int *p()和int (*p)()  有什么区别 最好是举例(程序)说明!
4.**p 什么意思 这样理解对不对?**p和*p有什么区别?
#include <stdio.h>
void main()
{
      char *name[] = {"Fishc.com", "www.fishc.com", "home.fishc.com", "Fishc.com/dz"};
      char **p;    //定义一个指向指针的指针
      int i;
      for( i=0; i < 4; i++ )
      {
            p = name + i;   //把name+i的地址存放在p里面
            printf("%s\n", *p);   //取p里面的地址的值
      }
}
                            谢谢

最佳答案

查看完整内容

呵呵 楼主,对于全面的指针深入解析,我认为一时间是说不清楚的,毕竟c的精华,岂是三言二语? 呵呵 下面的个人解说 希望能帮助你, 如有错误,在此道歉。 首先,问题一: int *p[n];和int (*p)[n] 分析: 你看第一个 int *p[n] 你在看看这个int p[n]; 这两个有共同之处, 就是p为数组。有n的元素 。 而不同之处 在于, int *p[n] 是表示 p为数组,含n个元素, 每个元素为int指针(强调哦,每个都为int型的指 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 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 ~

呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-1 21:42:09 | 显示全部楼层
呵呵   我回顾一看,  我把问题三打成打问题四了,问题四打成打问题五了   呵呵,  不好意思,  我还真是错误多多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-1 23:11:03 | 显示全部楼层
告诉你分析的方法吧!从变量出发,由内向外,例如分析:
int (*p)[n];
(*p)表明p是一个指针,这个指针指向什么呢,再向外分析,可以看到它指向一个int型的数组,这个数组存放了n个整型变量,所以p就是一个指向有n个整型变量的数组,再分析:
int *p[n];
由于[ ]的优先级高于*,所以p先与[n]结合,表明p是一个数组,这个数组存放的是什么呢?向外分析我们可以发现,这个数组存放的是int型的指针,所以p就是一个数组,这个数组存放n个int型指针,关于这些复杂变量的类型分析基本上都是这个思路,跟你推荐一个csdn的博客:http://blog.csdn.net/megaboy/article/category/147505

评分

参与人数 1鱼币 +2 收起 理由
怪胎 + 2 谢谢你

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-3 17:53:16 | 显示全部楼层

谢谢你 有点懂了 继续思考..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-23 22:48:15 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-24 10:53:38 | 显示全部楼层
这篇文章分析得十分透彻易懂,我时不时都回去看看
[知识分享] 深入理解C语言指针的奥秘
http://bbs.fishc.com/forum.php?mod=viewthread&tid=5218
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-7 20:40:43 | 显示全部楼层
为什么http://home.fishc.com/这个网站打不开?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 07:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表