指针函数
指针函数 : 返回值为指针的函数
局部变量的地址不可以作为函数返回值 , 因为局部变量在函数结束时候已经被系统回收了
char *words()
{
return “today is good day!\n”;
}
char *words2() //错误示范(局部变量)
{
char words[] = “today is good day!\n”;
return words;
}
char *words3()
{
// 申请堆中一块内存
int len = 20;
char *word = alloc(20,sizeof(char));
strcpy(word ,“today is good day!\n”;len -1);
return word;
}
// 当堆中一块内存没有指针指向它的时候 , 那么这一块内存就永远得不到释放
在堆中的内存没有释放之前必须有一个指针指向这一块内存
int main()
{
char *w = word();
printf(“%s”,w);
}
----------------------------------------------------------------------------------------------------------------
函数指针
指向函数的指针
函数指针定义格式: 指针所指向函数的返回值类型 (*函数指针名称) (指针所指向的函数的形参列表)
写一个函数指针的步骤:
1.拷贝索要指向的函数
2.在函数名称使用小括号括起来
3.在函数名称前面加*
4.修改函数名为指针名称
函数指针的指向是可以改变的 , 但必须指向同类型的函数
同类型的函数 : 返回值类型与形参雷彪都相同函数
void test()
{
printf(“空参数返回值函数\n”);
}
int main( ){
// test后面的括号是指向test所指向的代码
//test本身是一个指针
test();
printf(“%p\n”,test);
}
void (*mothedP)( );
mothedP = test;
//第一种调用方式
mothedP = test;
//第二种调用方式
mothedP( );
int sum(int sum1 , int sum2)
{
return num1 +num2;
}
int minus(int num1,int num2)
{
return num1 - num2;
}
int main()
{
int (*sumPointer)(int num1,int num2);
sumPointer = sum;
int rs = sumPointer(10,20);
printf(“rs=%d\n”,rs);
pointer =minus;
rs = pointer(10,20);
printf("rs=%d\n",rs)
}