六 指针与函数

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指向了x
    p2 = &b; // 使p2指向了y
    swap(p1,p2); // 调用函数交换a和b
    printf("交换以后: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;
}