好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

《讲C语言指针》PPT课件.ppt

17页
  • 卖家[上传人]:夏**
  • 文档编号:575506603
  • 上传时间:2024-08-18
  • 文档格式:PPT
  • 文档大小:330KB
  • / 17 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第十讲 指针目标l指针的概念与定义方式l指针的运算l指针操作一维数组l指针操作二维数组课本10.1—10.4 地址与指针的概念地址与指针的概念什么是地址?变量的地址—如图 int a=45; float f=3.14;……af2008H2009H200AH200BH200CH200DH200EH200FH2010H……453.14指针就是地址! 指针变量的定义指针变量的定义概念:用以存放变量地址的变量称为指针变量定义方式: 数据类型名 *指针变量名;例如: int *p1,q; int *p2,*p3; float *f1; char *c; double *d;1、指针变量名遵循标识符的定义方式2、指针变量名与*间有无空格都可以3、注意和普通变量的区别 指针变量的赋值指针变量的赋值如何让一个指针变量指向一个内存地址? int a=12,*p; p=&a;& 取地址运算符或者 int a=12,*p=&a;但是int *p=&a,a=12; // ?* 运算符的三种用途1、乘法运算2、定义指针变量3、取地址中的值指针变量变量变量地址(指针)变量值指向地址存入指针变量 指针变量的使用指针变量的使用有程序段如下: #include”stdio.h” void main(){int a=12,b,c,*p1=&a,*p2;p2=&b;*p2=24;c=a+b;c=*p1+*p2;printf(“c=%d\n”,c);printf(“c=%d\n”,c); }1、& 和 * 的运算优先级相同,结合性 :右→左2、指针变量的数据类型必须和变量的数据类型一致3、未指向具体变量的指针变量不能引用变量的两种访问方式1、通过变量名访问2、通过指针访问 指针变量的运算(一)指针变量的运算(一)1、指针可以和整数相加减例如: int a=24,b=26,*p; p=&a; printf(“%d”,*(p+1));又如:int a=12,b=24,c=36,d=48,*p;p=&a;printf(“a=%d\n”,*p);printf(“b=%d\n”,*(p+1));printf(“c=%d\n”,*(p+2));printf(“d=%d\n”,*(p+3));dcba48362412p不同类型的指针变量加上一个整数时,依据其数据类型所占字节数不同,移动的字节数也不同低高 指针变量的运算(二)指针变量的运算(二)例如:int a,b,c,d,*p=&b;a=12;b=24;c=36;d=48;printf("a=%d\n",*(p+1));printf("b=%d\n",*p);printf("c=%d\n",*(p--));printf("d=%d\n",*p--);a=12b=24c=24d=36说明:1、当出现*p-- 时,和*(p--) 等价2、无论做++ 、-- 运算,都对指针变量进行了赋值3、两个指针变量可以做减运算,运算结果是两地址在内存 中相隔的字节数;但不可做加运算,加运算没有意义 指向一维数组的指针指向一维数组的指针数组名又可表示数组元素在内存中存放的首地址,例如:int a[10],*p;那么 a 表示数组的首地址,其中, &a[i] 与 a+i 等价如果访问某个元素: a[i] 与 *(a+i) 等价 或者 *&a[i]或者利用指针: p=a; 或者 p=&a[0];然后利用: *(p+i) 访问某个数组元素C语言对数组下标越界或者指针越界不做检查 指针处理字符串指针处理字符串使用字符指针处理字符串,如下:char *p=“china”;或者char *p;p=“china”;定义后,指针p就指向字符串的第一个字符c那么,*(p+2) 表示什么? 二级指针二级指针二级指针是用于存放地址数据的地址变量例如:int a=3,*p,**p1;p=&a;p1=&p;若要访问数据3,则需要使用**p.如图:app13a的地址p的地址 指针数组处理字符串指针数组处理字符串如果数组的每个元素都是指针,就称为指针数组。

      一般用它来批量定义字符串,用来批量处理字符串定义方式:char *p[3]={“china”,”austrilia”,”russia”};那么: p[0] 表示“china”的首地址p[1] 表示“austrilia”的首地址p[2] 表示“american”的首地址 指针数组处理一维数组指针数组处理一维数组如果:int a[5]={0,1,2,3,4};int *pa[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};int **p=pa;那么 p 相当于 pa问题: pa[3] 表示什么? p+3 表示什么? *pa[3]表示什么? *(p+3)表示什么? 内存的动态分配内存的动态分配1、malloc(size):在内存的动态存储区分配一个长度为size 字节的连续空间,返回一个指针;若执行 失败,则返回NULL例如: char *p1; p1=(char *)malloc(80);2、calloc(n,size):在内存动态存储区分配n个长度为size的 的字节空间,返回一个指针;若执行失败 则返回NULL。

      3、free(p): 释放动态分配的字节空间使用以上函数,必须在文件头部加上#include”stdlib.h” 或者#include”alloc.h” 字符串处理函数字符串处理函数使用字符串处理函数必须在文件头部加上:#include”string.h”1、strlen(s1); //计算字符串长度2、strcpy(s1,s2);//复制字符串3、strcat(s1,s2);//连接字符串4、strcmp(s1,s2);//比较字符串 内存动态分配举例内存动态分配举例程序1程序2 其他函数其他函数1、sound(f);// f表示声波频率(HZ);20~200002、delay(n);// n表示延续的时间,单位:ms3、nosound();必须在文件头部加上#include”dos.h” 作业作业书面作业:P210 1.1~1.4上机作业: CM_06 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.