C语言里的指针

通俗的说,指针就是地址。
C语言中与指针有关的有:
指针与函数
指针与数组
指针与字符串
多级指针
下面就来一一介绍:
1.指针与函数:
(1) 函数返回指针
定义一个返回指针值的函数与以前定义函数格式基本类似,只是在函数名前加*,表明该函数返回一个指针值,而这个指针值是指向一个int 或 char 型的数据。
定义格式:数据类型 *函数名(形参列表)
{ 函数体;}
例:int *fun(int a,int b)
{ 函数体; }
(2)函数指针
顾名思义即指向函数的指针,是函数的入口地址。
在程序执行过程中调用函数时,计算机会转区执行函数体内语句。实际上函数在内存中也要占据一片存储单元,这片存储单元的起始地址我们称其为函数的入口地址,即函数的指针,这个函数的入口地址是用函数名来表示。因此我们可以定义一个指针变量,让它的值等于函数的入口地址,然后可以通过这个指针变量来调用函数。
定义格式:数据类型 (*指针变量名) (形参列表)
例:int (*pt) (int arr[], int n);

char * fun(char * p1, char * p2)
{
   int 
   i = 0;
   i = strcmp( p1, p2 );
   if(0 == i)
     return p1;
   else
     return p2;
}
int main()
{
   char *(*pf)(char *p1,char *p2);
   pf=&fun;
   (*pf)("aa","bb");
    return 0;
}

来看这个代码:( ( void()() ) 0)()
void (*) () 是一个函数指针类型
所以该代码意思是:把0强制转换为以上函数类型,并解引用,在对其进行调用
再来看一个:void ( signal ( int ,void()(int) ) ) (int)
相当于:
typedef void (*)(int) pfun_t;
pfun_t signal (int,pfun_t);
2.函数与数组:
(1)函数与数组的区别
<1>指针保存数据的地址,存入指针变量p的数据会被当做地址来处理;数组是用来保存数据的,数组名a代表数组首元素的首地址,而不是数组的首地址,&a才是整个数组的首地址。
<2>指针间接访问数据,首先取得指针变量p的内容,把它作为地址,然后从这个地址提取数据或者向它写入数据;数组直接访问数据,数组名a是整个数组的名字数组内每个元素并没有名字。
<3>指针通常用于动态存储数据结构;数组用于存储固定数目且数据类型相同的元素。
<4>指针相关的函数为malloc和free;数组则是隐式分配和删除。
<5>指针通常指向匿名数据(当然也可指向具名数据);数组则是自身即为数组名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值