指针
指针是C语言中非常重要的一个概念,它可以存储变量的内存地址,从而允许你直接访问和操作该地址上的数据。
以下是利用指针特性完成的一个小函数
实例
#include <stdio.h>
void interchange(int *px, int *py) // 函数的创建
{
int z = *px; // z=i=1
*px = *py; //*px=*py=2
*py = z; //*py=z=1
}
int main()
{
int i = 1;
int a = 2;
printf("交换前i=%d,a=%d", i, a);
interchange(&i, &a); // 函数的调用使用 传入指针参数
printf("交换后i=%d,a=%d", i, a);
return 0;
}
函数
interchange
函数:
- 这个函数接收两个指针作为参数(
px
和py
)。 - 在函数内部,首先将指针
px
所指向的值(即i
的值)存储在一个临时变量z
中。 - 然后,将指针
py
所指向的值(即a
的值)赋给指针px
所指向的地址。 - 最后,将临时变量
z
中存储的值(原来的i
值)赋给指针py
所指向的地址。
main
函数:
- 定义了两个整数变量
i
和a
,并分别初始化为1
和2
。 - 程序在交换之前打印出
i
和a
的值。 - 调用
interchange
函数,并传入i
和a
的地址。 - 程序在交换之后再次打印
i
和a
的值。
结果
交换前i=1,a=2
交换后i=2,a=1
一个简单且有效的方法,通过使用指针来交换两个变量的值。
总结
指针的危险性
指针的强大之处在于它直接操作内存,但这也使它容易出错。如果指针没有被正确初始化或错误地使用,可能会导致程序崩溃或者产生难以追踪的bug。例如,空指针(指向 NULL
)的解引用会导致程序崩溃。
常见的指针类型
空指针:NULL
,指向内存地址 0,表示该指针不指向任何有效的内存地址。
野指针:指针指向一个未知的或已经释放的内存地址,使用这种指针可能导致不可预知的错误。
指向指针的指针:可以声明指向指针的指针,如 int **pp
。