C语言北理工版1.pptxVIP

  • 3
  • 0
  • 约2.9千字
  • 约 17页
  • 2017-01-07 发布于上海
  • 举报
C语言北理工版1

指针光电学院 XXXdsdgzy@指针指针是C语言一种基本的数据类型,它记录的是数据在内存中的地址。指针的难度比较大,易出错,建议平时多加练习,考试用不到的时候不要随意使用。间接访问方式,是通过指针变量去存取另一个变量的值。通过处理内存地址,丰富了C语言的功能。指针可以方便地存储各种数据结构的地址,它可以但不限于指向一个整形,一个数组,一个结构体,一个函数。通过指针可以表示很多数据结构,可以表示链表,二叉树,等等。指针的定义和赋值定义变量时,名前带有星号*的就是指针变量。指针变量在使用之前必须赋值给它一个有效的地址,通常用取地址运算符将一个变量赋值给它。int a,*p;p=a;上面的两句等价于:int a,*p=a;上句中的*表示p是一个指针变量,而不是指针运算符。指针的定义和赋值取地址运算符后面跟一个变量。表示该变量的地址。在定义的时候,*表示它之后的变量是个指针变量;在表达式中,*是指针运算符,表示存取该地址的内容。取地址运算符与指针运算符*的优先级和结合性与其他一元运算符相同。它们也互为逆运算。定义int a,*p=a;有: p=a=(*p); a=*p=*(a);指针的使用//定义指针变量c和d,指针变量在使用之前必须赋一个有效的地址//在c指向a的前提下,c和a等价//使用*c来间接访问a的值使用指针计算a+b.#include stdio.hint main(){ int a,b,*c=a,*d=b; scanf(%d %d,c,d); printf(%d\n,*c+*d); return 0;}传址调用编写交换两个整形变量的函数:void swap(int *x,int *y){ int k; k=*x;*x=*y;*y=k; printf(%d %d\n,*x,*y);}主程序: swap(a,b); printf(%d %d\n,a,b);实参是变量的地址。如果主程序之前a=5,b=10,则程序输出为: 10 5 10 5实参变量的值也被交换了。传址调用当主程序调用swap函数时,系统为指针变量x和y分配存储单元,并将变量a和b的地址(即a和b)分别传递给它们。传递数据的实质是赋值,相当于: x=a; y=b; 在这个前提下,*x与a等价,*q与b等价。所以,交换了*x与*y,就是交换了a和b。调用swap函数后,实参变量a和b 的值就交换了。函数返回指针主函数:int *pmax;pmax=max(a,b);或pmax=max(a,b);int *max(int *a, int *b){ return(*a*b?a:b) ; }或int *max(int a, int b) { return(ab?a:b); }现阶段基本上没有发现什么用处。定义函数的时候,函数名前有*表示返回的是一个指针。return语句返回的必须是一个指针。函数的返回值赋值给pmax后,pmax当做普通指针使用。指向函数的指针定义: 类型标识符(* 指针变量名)();使用方法:赋值: 指针变量名=函数名使用: 用(* 指针变量名)代替 函数类型 函数名。后面加上(形参列表) 书p254用处:暂时没有发现在编程上有什么实际用处,基本没人用数组与指针数组名就是一个指向这个数组的第一个元素的常量指针。如定义 int a[10]; 则: *a==a[0]; a=a[0];定义指针 int x,y,*p=x; 则p+1指的是p指向的那个存储单元的下一个存储单元。一个int整数占4个字节,所以p+1指的就是p所指的那个字节向后面推4个字节的那个内存地址。所以*(a+1)==a[1];*(a+i)==a[i];对数组的访问。用下标访问和用指针访问一样。建议大家都用下标访问。数组与指针定义: int a[10],*p=a;*p==a[0]==p[0];*(p+i)==*(a+i)==a[i]==p[i];p与a的不同在于p是一个指针变量,它可以再赋值成别的数的地址;而a是一个指针常量,也是数组的名字,不可以改变。两个指针的差代表两个指针之间元素的个数:(a+n)-(a+m)==n-m二维数组与指针定义二维数组int a[3][4];列地址:a[i]是a[i][0]的地址a[i]+j是元素a[i][j]的地址,即a[i][j]*(a[i]+j)==a[i][j];行地址:a+i==a[i]*(a+i)==a[i] 带入列地址得:*(*(a+i)+j)==a[i][j]二级指针二级指针就是指向指针的指针。定义int a, *p1=a, **p=p1;或:int * a[10], **p = a;不可以这样写: int a[3][4],**p=a; 因为不管是几维数组,数组名都是一级指针。用处。书P270

文档评论(0)

1亿VIP精品文档

相关文档