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