指针的学习和运用
一.什么是指针
指针就是存放地址的变量当指针指向某个变量,这是这个指针里就存放了那个变量的地址。
例:
p=&a
当p指向a时,指针p里就存放了a的地址&a
空指针:NULL
指针变量只比普通变量多一个解引用。
例:
int a=100;//定义一个整形变量a值为100
int *p=&a;//指针变量p指向整形变量a
*p=100; //解引用,将100赋值给p当前所指的变量,即将100赋值给a
调试过程:
p保存a的地址
p解引用,*p=a
指针的练习:
int a=10; //定义a的值为10
int b=20;//定义b的值为20
int c=30;//定义c的值为30
int d=40;//定义d的值为40
int *p1=&a;//定义p1指针指向a的地址
int *p2=&b;//定义p2指针指向b的地址
*p1=50; //解引用:a=50 将原来a的值改为50
*p2=60; //解引用:b=60 将原来b的值改为60
p1=&d; //p1指向d的地址
p2=&c; //p2指向c的地址
*p1=70; //d=70
*p2=80; //c=80
p1=&c; //p1指向c的地址
p2=&d; //p2指向d的地址
*p1=100; //c=100
*p2=200; //d=200
整形地址变量保存整形地址值,其它同理。
父函数(主函数):调用函数,如main函数
子函数:被调用的函数
//父函数调用子函数,子函数的改变要想影响父函数,如下:
1.传指针 : 直接将实参的地址进行传送
2.解引用:通过对指针的解引用去修改其中的值
指针间的交换:
int tmp; //在定义空指针时绝对不能写成int *tmp,否则就为野指针。
tmp=*p1; //以下三行实现的是指针间的交换
*p1=*p2;
*p2=*tmp;
思考题:
此时程序为什么出错?
错在哪里?