黑马程序员------<a href="" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
六 指针与函数
01 指针作为函数参数
指针作为实参时,与普通变量一样,也是采用单向的值传递方式,即将指针变量的值(该值是一个地址)传递给被调函数的形参(必须也是一个指针变量)。由于形参接受实参传递的值是一个地址,这样两者就指向了同样的变量。
*如果想要C语言中得函数调用实现多个值的改变,可以设计一个形参是指针变量的被调函数,这样主调函数的实参指针与被调函数的形参指针相结合,根据形参指针与实参指针指向同一地址的原理,就可以通过改变该地址中得值,实现主调函数与被调函数之间的数据传递,从而使被调函数实际返回多个值到主调函数。
// 输入两个整数,用自定义函数实现这两个值的交换,并在主函数中输出交换后的结果.#include <stdio.h>void swap(int *x,int *y); //函数声明int main(){int a,b; // 定义两个需要交换的整数int *p1,*p2; // 定义两个指向int类型的指针 printf("请输入两个数:\n"); // 输入两个整数scanf("%d%d",&a,&b); // 接受两个整数 printf("交换前a=%d,b=%d\n",a,b); // 输出交换前的整数 p1 = &a; // 使p1指向了xp2 = &b; // 使p2指向了yswap(p1,p2); // 调用函数交换a和bprintf("交换以后:a=%d,b=%d\n",a,b);}void swap(int *x,int *y){int temp;temp = *x;*x = *y;*y = temp;}
02 返回指针值的函数
一般形式:
数据类型 *函数名(形参列表)
{
函数体;
}
03 指向函数的指针变量
可以把函数的首地址赋予一个指针变量,使该指针变量指向该函数,然后通过指针变量即可找到并调用这个函数,把这种指向函数的指针变量叫做函数指针变量。
一般形式:
数据类型 (*指针变量名)(函数形参列表)
#include <stdio.h>int main(){int a = 4474;int *p = &a;// p = &a;*p = 2;printf("%d\n",*p);// 变量类型 变量名;// 格式:变量类型 *变量名;// 定义了一个指针变量p// 指针变量只能存储地址// 指针就一个作用:能够根据一个地址值,访问对应的存储空间// 指针变量p前面的int:指针变量p只能指向int类型的数据return 0;}