C语言最为迷人之处中最光芒万丈的莫属于指针了,指针是指向程序运行中变量及函数的内存地址。对于指针的精妙使用可以实现很多高效的运算,最为常用的函数的非值传递就是通过指针实现的。

下面的内容为关于指针使用的一些内容:

指针定义

指针与其所指向的内容息息相关,我们是通过指针符号与变量类型的组合方式定义指针的。 如下:

//指针定义
int *x; 
char *y;

//指针初始化
int a = 10;
x = &a;

定义指针类型变量与普通变量定义不同之处在于在变量名之前的*, 这样表名定义的为指向某个具体类型的指针变量。

初始化指针需要通过取值符号&参与获取某个普通变量的地址进行,将某个变量的内存地址赋予指针变量。

指针的使用

下面我们通过一个变量交换的函数说明一下指针的常见的使用。

#include <stdio.h>

void swap(int *x, int *y);

int main() {

    //定义指针a,b
    int *a, *b, x=10, y=20;
    a = &x; //将指针a指向变量x
    b = &y; //将指针b指向变量y
    //打印指针a,b所指向变量的值
    printf("%d\t%d\n", *a, *b);
		
    //交换变量a,b的值
    swap(a, b);
    printf("%d\t%d\n", *a, *b);

    //将指针a所指向的变量的值修改为10,其实就是变量x的值修改为10。
    *a = 10;
    printf("%d\t%d\n", *a, *b);
    printf("%d\t%d\n", x, y);
   
    return 0;
}

//形参为指针的交换变量函数
void swap(int *x, int *y){
    //定义交换过程中的临时变量
    int tmp; 
    //将指针x指向的变量的值赋值给tmp
    tmp = *x; 
    //将指针y指向的变量的值赋值给指针x指向的变量
    *x = *y; 
    //将tmp变量中的值赋值给指针y所指向的变量
    *y = tmp;
}

以上的例子我们可以观察出如下的内容:

  • *a代表指针a所指向的变量,而非指针a的值
  • 指针初始化后是可以对其直接赋值的,如:*a = 10;。不过其含义仍然为指针a所指向变量的值修改为10,其实就是示例中的变量x。
  • 在初始化指针时,我们需要借助&取值符将变量与指针建立关系。

—ADD 2019-11-07