指针和函数:
函数也是有地址的,称为函数的入口地址,即为函数的指针。
函数的指针和指向函数的指针变量:
指针变量=函数名
Tips:赋予指针变量的值只能是某个函数的函数名,而该函数只能是赋值前已经定义好的函数,
该函数返回值类型必须和定义该指针变量时的“数据类型”保持一致。
定义的指针变量可以先后指向不同的函数,只要类型一致。
类型说明符(*指针变量名)
用指针变量调用所指向的函数时,需要注意:
1.指针变量必须已经指向了某个函数。
2.数据类型可以是整型、实型、字符型甚至是结构型的数据类型。定义指针变量
据类型和定义函数时的数据类型必须一致。
3.指针变量名是用户所选用的标识符,表示指向函数的指针变量。
4.“*指十变量”必须加据号,因为运算待=的优先级低于运算符().若号成证
的优先级低于“()”,
所以,会是p先和( )结合,代表这是一个函数。
函数的返回值是指向整型的指针。
在定义丽数指针之后,可以通过它间接调用所指向的函数。
如:
int funct(int,int); //定义一个函数
int(*p)(int,int); //定义一个指向函数的指针变量
p=funct; //把函数入口地址赋值给指针变量
指针与指向函数的应用:
#include<stdio.h>
int sum(int x,int y)
{
int z;
z=x+y;
printf("%d\n",z);
}
int main()
{
int (*p)(int,int); //定义一个int类型的指向函数的指针变量
int a=5,b=3;
p=sum;
sum(a,b); //通过函数名调用函数
(*p)(a,b); //通过函数指针调用函数
}
运行结果:
8
8
Tips:
int (*p)(int,int);表示定义一个int类型的指向函数的指针变量,并不是固定指向一个函数的,而是可以用来只想具有int 函数名(int,int)形式所有函数。 p=sum;只用给出函数名,不用参数。不能写成p=sum(int,int); or p=sum(a,b);
指向函数的指针作为函数参数:
把函数地址作为参数传递到其他函数,在调用过程中就可以使用实参函数。
函数间数据传递:值传递,地址传递,返回值,外部变量传递。(前二需要函数参数传递数据)
指针数组作为函数参数:
以前写int main() 括号为空,表示main()函数无参函数。实际上可有。
如:int main(int argc,char *argv[])
命令名 参数1 参数2 参数3....(参数名和命令行空格隔开)
TipS:由命令行向参数中传递的参数都是以字符串形式出现的,想获得其他类型的参数。
如数字参数,必须在程序中进行相应的转换。
返回指针值得函数:
如:
int *fun()
{
int *p;
...
return(p);
}
说明,返回值是一个指向整型变量的指针。
字符串指针作为函数参数:
字符串的表示形式:
char str[80]="need";
char *p=str;
printf("%s",str);
printf("%s",p);
printf("%s","need"); //输出皆为need
可使直接p指向字符串的开始地址:
char *p="need";
函数也是有地址的,称为函数的入口地址,即为函数的指针。
函数的指针和指向函数的指针变量:
指针变量=函数名
Tips:赋予指针变量的值只能是某个函数的函数名,而该函数只能是赋值前已经定义好的函数,
该函数返回值类型必须和定义该指针变量时的“数据类型”保持一致。
定义的指针变量可以先后指向不同的函数,只要类型一致。
类型说明符(*指针变量名)
用指针变量调用所指向的函数时,需要注意:
1.指针变量必须已经指向了某个函数。
2.数据类型可以是整型、实型、字符型甚至是结构型的数据类型。定义指针变量
据类型和定义函数时的数据类型必须一致。
3.指针变量名是用户所选用的标识符,表示指向函数的指针变量。
4.“*指十变量”必须加据号,因为运算待=的优先级低于运算符().若号成证
的优先级低于“()”,
所以,会是p先和( )结合,代表这是一个函数。
函数的返回值是指向整型的指针。
在定义丽数指针之后,可以通过它间接调用所指向的函数。
同其他类型指针相似、首个函数名赋给函数指针,然后才可以通过函数指针间接调用这个函数。
一个函数指部指向用户自定义的函数,也可以指向由C 语言系统所提供的库函数。
如:
int funct(int,int); //定义一个函数
int(*p)(int,int); //定义一个指向函数的指针变量
p=funct; //把函数入口地址赋值给指针变量
指针与指向函数的应用:
#include<stdio.h>
int sum(int x,int y)
{
int z;
z=x+y;
printf("%d\n",z);
}
int main()
{
int (*p)(int,int); //定义一个int类型的指向函数的指针变量
int a=5,b=3;
p=sum;
sum(a,b); //通过函数名调用函数
(*p)(a,b); //通过函数指针调用函数
}
运行结果:
8
8
Tips:
int (*p)(int,int);表示定义一个int类型的指向函数的指针变量,并不是固定指向一个函数的,而是可以用来只想具有int 函数名(int,int)形式所有函数。 p=sum;只用给出函数名,不用参数。不能写成p=sum(int,int); or p=sum(a,b);
指向函数的指针作为函数参数:
把函数地址作为参数传递到其他函数,在调用过程中就可以使用实参函数。
函数间数据传递:值传递,地址传递,返回值,外部变量传递。(前二需要函数参数传递数据)
指针数组作为函数参数:
以前写int main() 括号为空,表示main()函数无参函数。实际上可有。
如:int main(int argc,char *argv[])
命令名 参数1 参数2 参数3....(参数名和命令行空格隔开)
TipS:由命令行向参数中传递的参数都是以字符串形式出现的,想获得其他类型的参数。
如数字参数,必须在程序中进行相应的转换。
返回指针值得函数:
如:
int *fun()
{
int *p;
...
return(p);
}
说明,返回值是一个指向整型变量的指针。
字符串指针作为函数参数:
字符串的表示形式:
char str[80]="need";
char *p=str;
printf("%s",str);
printf("%s",p);
printf("%s","need"); //输出皆为need
可使直接p指向字符串的开始地址:
char *p="need";