在我看来 有许多计算问题如果通过函数调用方式来解决就会使得代码整体看起来简介又便于识别
但是在调用函数时候要注意以下几个问题
一、基本功能
1、函数调用,即把函数的输入值填进函数名后面的括号中,不需要注明函数类型
interchange(x, y);//无返回值
x = interchange(x, y);//返回值为 x
2、定义函数,此处重点注意:
1):无返回值时:
void interchange(int u, int v)
2):有返回值时:
double interchange(int u, int v) //double 为返回值类型
3、函数声明:重点:后面带有分号
void interchange(int u, int v); //无返回值
double interchange(int u, int v); //有返回值
但是上述方法要么没有返回值 , 要么只能有一个返回值(因为定义函数内部 return xxx 只能跟一个值,并且如果没有返回值,函数内部对值的计算和改变就不能影响到原来函数内部的值)
二、指针方法改变原来函数值
1、首先了解指针:指针(pointer)是一个值为内存地址的变量
ptr = &booh; // ptr 就是指针,存储的是 booh 的地址
2、运算符:
1):&
&nurse 表示的是 nurse 的地址
2):*
* 的后面跟指针名或者地址 读出该地址内部的值
nurse = 22;
ptr = &nurse; // 指向nurse的指针
val = *ptr; //将 ptr 地址上的值 22 赋给 val
3):打印指针,即打印变量存储位置 %p
printf("%p\n",ptr); // 打印指针 ptr
4):指针在函数中的使用(交换函数问题具体代码):
#include<stdio.h>
void interchange(int * u, int * v); //函数声明
int main(void)
{
int x = 5, y = 10;
printf("Oringinally x = %d and y = %d.\n",x, y);
interchange(&x, &y) // 调用函数 此处调用的是变量存储地址 所以能改变变量的值
printf("Now x = %d, y = %d.\n",x, y);
}
void interchange(int * u, int * v) //函数定义 * 作用是读取 后面地址中的变量的值 所以 此处传进来的是两个int 类型的值
{
int temp;
temp = *u; //将指针 u 指向的地址中的值传给 temp
*u = *v; //将指针 v 对应的地址中的值传到指针 u 指向的地址中
*v = temp; //将 temp 中的值传给指针 v 指向的地址中
}
注:这个函数虽然没有返回值,但是却能改变原函数中的值,这要归功于指针的作用,直接使得调用函数能够对地址中的变量进行改变,从而不需要返回值(此乃釜底抽薪)