题记:因为想系统学一下数据结构,故先复习C语言的指针。
一、指针的作用
1、表示一些复杂的数据结构;
2、能直接访问硬件;
3、快速的传递数据,减少了内存的损耗;
4、能使函数返回一个以上的值;
5、能够方便的处理字符串。
二、指针的定义
1、指针就是地址,地址就是指针;
2、指针变量就是存放内存单元编号的变量,或者说指针变量就是存放地址的变量;
3、指针和指针变量是两个不同的概念。通常我们叙述是会把指针变量简称为指针,实际上他们的含义并不一样。
三、指针的常见错误
# include <stdio.h> int main(void) { int * p; static int i = 5; *p = i; //错误,因为P中的值是一个垃圾值,使P指向了一个系统并未分配的值,不能访问通过*p访问该地址的值 printf("%d ", *p); return 0; }
四、使函数返回一个以上的值
看一个简单的例子,调用函数来交换两个变量的值:
/* 2016年8月31日21:28:47 交换两个变量的数值 */ #include <stdio.h> void change(int * x, int * y); int main(void) { int x = 1; int y = 2; change(&x, &y); printf("x = %d y = %d ",x, y); //运行结果:x = 2 y = 1 return 0; } void change(int * x, int * y) { int t; t = *x; *x = *y; *y = t; return; }如果调用函数利用return只能得到一个返回值,而使用指针变量做形参则可以返回多个变量的值。
注意下面两个程序不能完成交换两个变量的值的功能:
#include <stdio.h> void change(int x, int y); int main(void) { int x = 1; int y = 2; change(x, y); printf("x = %d y = %d ",x, y); return 0; } void change(int x, int y) //不能完成互换功能,只是局部变量的值交换了,不会影响全局变量的值 { int t; t = x; x = y; y = t; return; }
#include <stdio.h> void change(int * x, int * y); int main(void) { int x = 1; int y = 2; change(&x, &y); printf("x = %d y = %d ",x, y); return 0; } void change(int * p, int * q) //不能完成互换功能,只是交换了p和q的地址,不会改变x和y的值 { int * t; t = p; p = q; q = t; return; }