指针
一.指针是什么?
内存区的每一个字节有一个编号,这就是地址。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,将地址形象化地称为“指针”。
变量的访问方式有两种:
1.直接访问:通过变量名直接访问;
2.间接访问:没办法直接通过地址访问,所以只能通过指针变量间接访问,即将变量的地址存放在另一个变量(指针变量)中。
二.为什么使用指针?
使程序更加简洁,高效,紧凑;能有效表示复杂的数据结构;动态分配内存;得到大于一个的函数返回值
三.指针变量如何定义?
储存类型 类型名 *指针变量名;//当储存类型省略时为auto类型
eg: int i=1;
int *p; //int是指i的类型,是基类型
p=&i;
也可以一步合成:
int i=1;
int *p=&i;
1.指针变量前面的“*”表示该变量为指针型变量。指针变量名不包括“*”。
2.在定义指针变量时必须指定基类型。一个变量的指针的含义包括两方面,一是以存储单元编号表示的纯地址(如编号为1024的字节),一是它指向的存储单元的数据类型(如int ,char等等)
3.指向整型数据的指针类型表示为“int *”,读为“指向int的指针”或简称“int指针”。
4.指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量。
四.指针变量如何引用?
eg:int i,*p; //定义变量和指针变量
p=&i; //将变量i的地址赋给指针变量p
*p=2; //给变量赋值
printf("%d\n",*p); //引用指针变量p,显示i的值
来段代码示例:
#include #include int main(int agrc,char*agrv[]){ int *p1,*p2,*p,a,b; //p1,p2 的类型为int* printf("输入两个整数\n"); scanf("%d%d",&am����,����p;a,&b); p1=&a; //p1指向变量a p2=&b; //p2指向变量b if(a<b) { p=p1; p1=p2; p2=p; } printf("%d %d\n",a,b); //运行结果a,b的值不会调换 printf("max=%d min=%d\n",*p1,*p2); //输出p1,p2 所指向的变量的值return 0;}
五.指针变量作为函数参数
代码走起
//输入三个整数,由小到大排序#include #include void sort (int *pa,int *pb);int main(int agrc,char*agrv[]){ int a=3,b=6,c=1,*p1=&a,*p2=&b,*p3=&c; sort(p1,p2); sort(p1,p3); sort(p2,p3); printf("由小到大排序:\n%3d%3d%3d",*p1,*p2,*p3); printf("%d %d %d\n",a,b,c);return 0;}void sort (int *pa,int *pb){ int temp; if(*pa>*pb) { temp=*pa; *pa=*pb; *pb=temp; }}再来#include #include void change(int* k,int *w,int *e,int *d);int main(int agrc,char*agrv[]){ int a=1,b=2,c=3,d=4; int *p,*q,*m,*n; p=&a; q=&b; m=&c; n=&d; change(p,q,m,n); printf("%d %d %d %d\n",a,b,c,d);return 0;}void change(int* k,int *w,int *e,int *d){ *k=10; *w=20; *e=30; *d=40;}
过段时间会写一篇指针的详解啊啊啊