C语言之指针

题记:因为想系统学一下数据结构,故先复习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;
}



原文地址:https://www.cnblogs.com/yzy-blogs/p/6597337.html