5个回答
展开全部
你不明白的是具体的用法!而不是含义!
倒数第一个,是一个函数指针直接用pfi=funcname;这句就可以指向一个函数,调用函数的时候就用pfi();
上面指向函数的指针你了解了吧,函数名本身就是地址,要看它的本质。比如数组,数组的名字比如a[10]中a就是一个地址,这就是它的本质!
倒数第二个,我把它变个形(其实还是一样的):int* pfi();这样你是不是就明白了?返回值是int*,名字叫pfi的这么一个函数!他和int,char,void声明方法不都是一样的?所以希望这个你懂了,好看下面。
正着数第四个不常用,但是你一看,加了个括号,很明显指向的类型char[]数组,这个只能吧指针名字写在中间,本来你是可以看懂的!但是把指针写在中间你就可能理解错,其实指针类型就是char[]不要想太多,灵活一点!
还有第三个,这个很明显,如果没加括号,那变形(星号在空格前面还是后面都一样)----char* acp[10];那你看,类型是不是char*?那么acp就是变量名,也就是说定义了一个指针,名字叫acp,但是!!!后面有方括号10,啥意思--这是一个很平凡的数组,不过数据类型是指针而已!!
啊啊啊好累啊,回答不易.......呃我要猝死了快救我....
赏我点积分,采纳!我就可以康复了!快我快.....
倒数第一个,是一个函数指针直接用pfi=funcname;这句就可以指向一个函数,调用函数的时候就用pfi();
上面指向函数的指针你了解了吧,函数名本身就是地址,要看它的本质。比如数组,数组的名字比如a[10]中a就是一个地址,这就是它的本质!
倒数第二个,我把它变个形(其实还是一样的):int* pfi();这样你是不是就明白了?返回值是int*,名字叫pfi的这么一个函数!他和int,char,void声明方法不都是一样的?所以希望这个你懂了,好看下面。
正着数第四个不常用,但是你一看,加了个括号,很明显指向的类型char[]数组,这个只能吧指针名字写在中间,本来你是可以看懂的!但是把指针写在中间你就可能理解错,其实指针类型就是char[]不要想太多,灵活一点!
还有第三个,这个很明显,如果没加括号,那变形(星号在空格前面还是后面都一样)----char* acp[10];那你看,类型是不是char*?那么acp就是变量名,也就是说定义了一个指针,名字叫acp,但是!!!后面有方括号10,啥意思--这是一个很平凡的数组,不过数据类型是指针而已!!
啊啊啊好累啊,回答不易.......呃我要猝死了快救我....
赏我点积分,采纳!我就可以康复了!快我快.....
展开全部
楼上的讲了指针的用法,我就说一说如何理解指针的定义。有一个标准的方法用于解读这些定义,称为“右左法则”。方法是:
首先从最里面的圆括号看起,先往右看,再往左看。每当遇到圆括号时,就掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。
char *acp[10];
这个定义没有括号。从标志符acp看起,先向右看,看到[10],说明acp是一个数组。右边没有了,再向左看,是个char*,说明数组的元素是char*。
总的来说,acp是一个10元素的数组,元素类型是char*。
char (*pac)[10];
从pact向右看,遇到圆括号,向左,看到*,说明pac是一个指针。圆括号里的东西看完了,跳出来。向右看,是[10],说明pac指向一个数组。再向左看,看到char,说明数组元素是char。总的来说,pac是一个指针,指向一个10元素的数组,元素类型是char。
int *fpi();
从fpi向右看,是个(),说明fpi是一个函数。再向左看,看到int*,说明函数返回类型是int*。总的来说,fpi是一个函数,返回值是int*类型。
int (*pfi)();
从pfi向右,遇到圆括号,向左,看到*,说明pfi是一个指针。跳出圆括号,向右,看到(),说明pfi指向一个函数。再向左,看到int,说明函数返回类型是int。总的来说,pfi是一个指针(一般称为函数指针),指向一个函数,这个函数返回值是int类型。
以上定义非常简单,只要熟悉数组、数组、指针的定义格式,多看几次就熟悉了。再举一个稍为复杂的例子int (*func)(int *p, int (*f)(int*));
这个定义包含多个标识符,用上面的法则可以看出func是一个函数指针,它包含2个参数,其中参数p是一个int指针,参数f是一个函数指针。func指向的函数的返回类型是int。至于f的定义就自己来分析吧
首先从最里面的圆括号看起,先往右看,再往左看。每当遇到圆括号时,就掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。
char *acp[10];
这个定义没有括号。从标志符acp看起,先向右看,看到[10],说明acp是一个数组。右边没有了,再向左看,是个char*,说明数组的元素是char*。
总的来说,acp是一个10元素的数组,元素类型是char*。
char (*pac)[10];
从pact向右看,遇到圆括号,向左,看到*,说明pac是一个指针。圆括号里的东西看完了,跳出来。向右看,是[10],说明pac指向一个数组。再向左看,看到char,说明数组元素是char。总的来说,pac是一个指针,指向一个10元素的数组,元素类型是char。
int *fpi();
从fpi向右看,是个(),说明fpi是一个函数。再向左看,看到int*,说明函数返回类型是int*。总的来说,fpi是一个函数,返回值是int*类型。
int (*pfi)();
从pfi向右,遇到圆括号,向左,看到*,说明pfi是一个指针。跳出圆括号,向右,看到(),说明pfi指向一个函数。再向左,看到int,说明函数返回类型是int。总的来说,pfi是一个指针(一般称为函数指针),指向一个函数,这个函数返回值是int类型。
以上定义非常简单,只要熟悉数组、数组、指针的定义格式,多看几次就熟悉了。再举一个稍为复杂的例子int (*func)(int *p, int (*f)(int*));
这个定义包含多个标识符,用上面的法则可以看出func是一个函数指针,它包含2个参数,其中参数p是一个int指针,参数f是一个函数指针。func指向的函数的返回类型是int。至于f的定义就自己来分析吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int (*p)()函数指针 它的类型为返回int无参数
p可以指向int 任意名()的函数
int* p()这是函数返回int*
int (*p)[10]这是指针 指向int 任何名[大于0][10]的数组
int *p[10]这是数组 存放10个int*指针
p可以指向int 任意名()的函数
int* p()这是函数返回int*
int (*p)[10]这是指针 指向int 任何名[大于0][10]的数组
int *p[10]这是数组 存放10个int*指针
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2020-03-03
展开全部
指针和普通的变量一模一样,没有任何一丁点的区别
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
30分钟彻底学会C语言指针
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询