码迷,mamicode.com
首页 > 编程语言 > 详细

关于理解数组与指针

时间:2015-12-11 07:00:00      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:c语言   数组   指针   函数   

指针指向数组问题

int arr1[10];
char arr2[10];
char *parr[10];//指针数组
int(*parr1)[10]=&arr1;
int *p=arr1;
char *(*pparr[3])[10];//指向数组的指针数组

指向函数的指针

void fun1(char *str)
{
printf("%s\n",str);
}
void fun2(char *str)
{
printf("%s\n",str);
}
void fun3(char *str)
{
printf("%s\n",str);
}
//函数类型均相同(返回值相同,参数类型相同),这些函数可以放到指针数组里
int main()
{
void(*pfun1)(char *p)=fun1;//fun1赋给*pfun1这个指针
void(*pfun2)(char *p)=fun2;//fun2赋给*pfun2这个指针
void(*pfun3)(char *p)=fun3;//fun3赋给*pfun3这个指针

pfun1("fun1");//调用fun1函数
pfun1("fun2");//调用fun2函数
pfun1("fun3");//调用fun3函数
return 0;
}

由于这些函数类型都相同,main函数也可这样写

int main()
{
void(*pfun)(char *p)=fun1;//pfun不断变化调用其他函数
pfun=fun1;
pfun("fun1");

pfun=fin2;
pfun("fun2");

pfun=fun3;
pfun("fun3");

return 0;
}

由于这些fun函数类型均相同(返回值类型和函数类型),也可用指针数组改写

int main()
{
void(*pfun[4](char *p)=fun1);//存放4个元素的指针数组
void(*pfunarr[4])(char*p);//pfunarr首先是一个数组,函数指针的数组

}

指向数组的指针

int fun(char*a,int*b)
{
return 0;
}
#include<stdio.h>
{
int (*p)(char*,int*);//函数指针
    int (*pfun[10])(char*,int*);存放函数指针的数组
    int(*(*q)[10])(char*,int*);//能够指向函数指针的数组的指针
    //int (*(*pfun)[10])(char*,int*);//pfun指向数组,(*pfun)[10]指向函数,函数类型是
                                      //char*,int*  指向函数指针数组的指针  
     q=&pfun;//指向函数指针的数组的指针,数组的每个元素也是一个指针
    //int(*w)[10];//指向整形数组的指针
    return 0;
}

相对较复杂的指针

(*(void(*)())0)();

为函数调用,调用0作为函数地址,强制转化为指针

void(*signal(int,void(*)(int)))(int);

函数声明,函数返回值为void,参数类型为int,里面的signal指针,第一个参数为int,第二个为一个函数,返回值void,参数类型int

但是,这样写函数过于麻烦,一般用typedef来改写

int arr[10];
typedef int(*parrPtr)[10];

当不加typedef时parrPtr为数组指针变量名,重命名后为这个类型的名

parrPtr p1 = &arr;

void fun(char*c, int *i)
{
}
//类型重命名
typedef void(*pfunPtr)(char*, int*);
//调用时
pfunPtr p4 = fun;
typedef void(*pfunptr2)(int);
void(*signal(int, void(*)(int)))(int);

故void(*signal(int,void(*)(int)))(int);可相应改写为

pfunptr2 signal(int,pfunptr2);
//指向这个函数的指针
pfunptr2(*pfun)(int, pfunptr2) = signal;




本文出自 “无以伦比的暖阳” 博客,请务必保留此出处http://10797127.blog.51cto.com/10787127/1721858

关于理解数组与指针

标签:c语言   数组   指针   函数   

原文地址:http://10797127.blog.51cto.com/10787127/1721858

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!