关于指针的一大堆问题
1.int i; 整形变量
int *p; 指针变量
int a; 数组
int *p; 指针数组
int (*p); (请问是不是数组指针)
int f() 函数
int *p() 指针函数
int (*p)() 函数指针
int **p 指向指针的指针
2.请问int *p;和int (*p);有什么区别 最好是举例(程序)说明!
是不是说*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;和int (*p)
分析:你看第一个int *p 你在看看这个int p; 这两个有共同之处, 就是p为数组。有n的元素 。 而不同之处 在于, int *p是表示 p为数组,含n个元素, 每个元素为int指针(强调哦,每个都为int型的指针),int p 是表示 p为数组,含n个元素, 每个元素为int类型。那么我们看看这 int(*p)
p为指针,指向的由n个int类型变量数构成的数组.也就是说他们最大的区别在于一个是数组的类型。 而另一个是指向一个数组 (对于举例,犹豫篇幅的问题,所以我只能列出很简单的在此表示歉意)
比如:
int a = {0,1,2}; //定义一个 整形数组a有三个元素 分别是 a,a,a
int *p1={%a, %b, %c}//假设 前面定义了 3个 变量 a b c呵呵,抱歉 没能写详细
int (*p)=%a // 这里是取 int p的地址,看清楚是int a哦而不是 int *p1 想一想为什么?
问题二: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 ~
呵呵 呵呵 我回顾一看,我把问题三打成打问题四了,问题四打成打问题五了 呵呵,不好意思,我还真是错误多多 告诉你分析的方法吧!从变量出发,由内向外,例如分析:int (*p);(*p)表明p是一个指针,这个指针指向什么呢,再向外分析,可以看到它指向一个int型的数组,这个数组存放了n个整型变量,所以p就是一个指向有n个整型变量的数组,再分析:int *p;由于[ ]的优先级高于*,所以p先与结合,表明p是一个数组,这个数组存放的是什么呢?向外分析我们可以发现,这个数组存放的是int型的指针,所以p就是一个数组,这个数组存放n个int型指针,关于这些复杂变量的类型分析基本上都是这个思路,跟你推荐一个csdn的博客:http://blog.csdn.net/megaboy/article/category/147505 梦幻羽羽 发表于 2012-9-1 21:39 static/image/common/back.gif
呵呵楼主,对于全面的指针深入解析,我认为一时间是说不清楚的,毕竟c的精华,岂是三言二语?呵呵下面 ...
谢谢你 有点懂了 继续思考.. 楼主加油,鱼C加油!我们都看好你哦! 这篇文章分析得十分透彻易懂,我时不时都回去看看
[知识分享] 深入理解C语言指针的奥秘
http://bbs.fishc.com/forum.php?mod=viewthread&tid=5218 为什么http://home.fishc.com/这个网站打不开?
页:
[1]