一.复习函数

函数原型是告诉编译器函数的类型,函数调用表明在此处执行,函数定义明确地指定函数要做什么。

一般而言函数原型指明了函数的返回值类型和函数接收的参数类型,这些信息称为该函数的签名

函数原型的优点:函数原型能让编译器捕获在使用函数时可能出现的许多错误或者疏漏

二.&运算符

指针是c语言最重要的概念之一,用于存储变量的地址。

作用:通过传递指针的方式可以改变传递过来的指针相应的值。如果通过值传递则是在函数中生成副本,改变副本的值,原先的值则不会改变。

pool是变量名,则&pool是变量的地址。可以把地址看做是变量在内存中的值。

三.指针简介

指针是一个值为内存地址的变量

1.间接运算符:*

假设ptr指向bah,如下所示:

ptr = &bah;

然后使用间接运算符*找出存储在bah的值,该运算符有时候也被称为解引用运算符。

v = *ptr; //找出ptr的值

以上两句相当于下面的语句;

v = bah;

2.声明指针

pointer ptr;//不能这样声明指针

为什么不能像上面那样声明指针,因为声明指针变量时必须指定指针所指向变量的类型,因为不同的变量类型占用不同的存储空间,一些指针操作要求知道操作对象的大小。

int * pi;//指向int类型的指针

char * pc;//指向char类型的指针

float * pf, * pg;//指向float类型的指针

3.使用指针在函数之间通信

# include <stdio.h>
void interchange(int u,int v);

int main(void){
    int x = 5,y = 10;

    printf("Originally x = %d and y = %d.\n", x, y);
    interchange(x,y);
    printf("Now x = %d and y = %d.\n", x, y);

    return 0;
}

void interchange(int u,int v){
    int temp;

    printf("Originally u = %d and u = %d.\n", u, v);
    temp = u;
    u = v;
    v = temp;
    printf("Now u = %d and v = %d.\n", u, v);
}

输出结果:
Originally x = 5 and y = 10.
Originally u = 5 and v = 10.
Now u = 10 and v = 5.
Now x = 5 and y = 10.
以上结果可以看出来x与y的值没有进行交换,因为x将值传递给u,y将值传递给v,所以又产生了变量u和v,交换只是交换了u和v的值。

# include <stdio.h>
void interchange(int u,int v);

int main(void){
    int x = 5,y = 10;

    printf("Originally x = %d and y = %d.\n", x, y);
    interchange(x,y);
    printf("Now x = %d and y = %d.\n", &x, &y);

    return 0;
}

void interchange(int * u,int * v){
    int temp;
    temp = * u;
    * u = * v;
    * v = temp;
}
输出结果:
Originally x = 5 and y = 10.
Originally x = 10 and y = 5.
可以看出指针传递方式可以进行值交换。