原帖由 scutan 于 2007-9-19 16:14 发表
心血来潮, 想对函数指针的几个用法小结一下, 都是平常容易见到的, 如果还有其它不觉的用法也请朋友们不吝赐教.
若有错误之处,还请指正.
1. 首先,在C语言中函数是一种function-to-pointer的方式,即对于一个 ...
原帖由 zx_wing 于 2007-9-19 16:21 发表
赞lz的热心。
对于函数指针数组,其实这是很常用的。一个常见的例子就是linux下的syscall table了。虽然是用汇编写的,但实质是一样的
原帖由 ddvv 于 2007-9-19 21:28 发表
写得很好,顶你~
第4条有点不明白,为什么访问int (*a)[10]要用*(*a+i)的方式呢?int (*a)[10]与a[10]有什么不同吗?用*(a+1)不可以?
原帖由 ddvv 于 2007-9-19 21:28 发表
写得很好,顶你~
第4条有点不明白,为什么访问int (*a)[10]要用*(*a+i)的方式呢?int (*a)[10]与a[10]有什么不同吗?用*(a+1)不可以?
原帖由 ddvv 于 2007-9-19 21:45 发表
恩,关于多为数组我晓得,只是不理解int (*a)[10]这个声明。
如此看来,a就相当与一个指针的指针,也就是int **a了,不知道这样理解对不对?
原帖由 ddvv 于 2007-9-19 21:45 发表
恩,关于多为数组我晓得,只是不理解int (*a)[10]这个声明。
如此看来,a就相当与一个指针的指针,也就是int **a了,不知道这样理解对不对?
原帖由 ddvv 于 2007-9-19 21:45 发表
恩,关于多为数组我晓得,只是不理解int (*a)[10]这个声明。
如此看来,a就相当与一个指针的指针,也就是int **a了,不知道这样理解对不对?
原帖由 wzabcd1234 于 2007-9-19 22:18 发表
受益了,不过有一个问题没有理解。
第一个程序中&fun和fun的地址为什么是相同的啊?
比如下面这个程序:
int main()
{
int a = 13;
int *p = &a;
printf("%p\n", p);
printf("%p\n", ...
&fun是该函数的地址, 为指针类型, fun是一个函数, 会转换成其指针类型
,
原帖由 ddvv 于 2007-9-19 23:48 发表
现在终于明白了。CSDN上面找到一边专门讲指针的文章,有点长,但是讲得通俗易懂。
推荐一下:
http://community.csdn.net/Expert/TopicView3.asp?id=5290998
原帖由 arnina 于 2007-9-21 13:37 发表
下面是他的观点:
“下面总结一下数组的数组名的问题。声明了一个数组TYPEarray[n],则数组名称array就有了两重含义:第一,它代表整个数组,它的类型是 TYPE[n];第二,它是一个指针,该指针的类型是TY ...
这三个值的结果是一样的. 其实对于最后的那个*fun, 即使前面加上很多个*号, 其结果也不变, 即**fun, ***fun的结果都是一样的
原帖由 ddvv 于 2007-9-19 21:45 发表
恩,关于多为数组我晓得,只是不理解int (*a)[10]这个声明。
如此看来,a就相当与一个指针的指针,也就是int **a了,不知道这样理解对不对?
void foo() { printf("hello\n"); } int main() { char c[7]; int pf = (int)foo; c[0] = 0xff; c[1] = 0x15; *(((int*)&c[2])) = (int)&pf; c[6] = 0xc3; ((void (*)())&c)(); return 0; } |
请教一下:
1.typedef void Func(int);
2.typedef void (*Func1)(int);
1和2有什么区别?
我有 ...
zjykzk 发表于 2010-11-13 12:17
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |