|
发表于 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 ~
呵呵 |
|