函数指针和数组指针和强制类型转换

在论坛给朋友解释概念的时候写的,记录下来, 省的以后再动口水^_^.

还有函数指针比如void (*pf)(void);,既然是指针那么内容也是一个地址,只是这个地址比较特殊。是一个函数的地址。
当我们定义一个函数时候,比如void f(void);这个函数的名字就代表函数的地址了,它也是一个函数指针,内容是函数的地址,既然是一个指针,那么它指向的那个函数应该就是(*f)()表示了。但为什么用f()来表示呢。我估计是为了方便(要不然还不烦死)。而函数指针跟这个f一样也是指向函数的,内容是函数的首地址,所以pf=f;可以赋值。(*pf)();表示调用这个函数(*pf表示指向的内容嘛,那就是那个函数)。当然我们看到光用f();就可以调用这个函数(虽然f也是一个指针,内容也是函数首地址),所以(*pf)();也可以写成pf();(在哪本书上看到过,忘了,对不住哈)
^_^.数组指针也跟函数指针差不多。娃哈哈。
#include<stdio.h>
void f(void)
{
}

int main()
{
   printf("%p",f);//我连函数都没调用,表明只要定义一个函数了这个函数就有一个地址,如果调用这个函数,就会去那个地址干点什么。
   return 0;
}

 

还有类型转换:
类型不一样,如果要相互赋值或者运算的时候,就要转换了。
比如(void *)指针什么都能指,而(int *)只能指向int类型。
当调用malloc函数时候,malloc返回的void *.
int *pINT=(int *)malloc(sizeof(int)*100);
.......
free(pINT);
pINT=NULL;//这两句是后话,表明我已经习惯看到malloc就记得写free^_^
有些不需要强制转换,系统帮你搞定,如int,赋值给float.
但是float赋值给int就要强制转换。
有一个简单记忆方法:
"大范围的"(添加一个双引号表明我指的是感觉上大的,float比int大,void*可以指向任意类型,所以比int *大,)就要强制类型转换。
其实最好不同类型赋值时候都强制类型转换。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=555728

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值