电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

善于利用指针

89页
  • 卖家[上传人]:简****9
  • 文档编号:115003453
  • 上传时间:2019-11-12
  • 文档格式:PPT
  • 文档大小:1.66MB
  • / 89 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、uu学习内容学习内容 指针与指针变量的概念指针与指针变量的概念 指针变量的定义和引用指针变量的定义和引用 指针和地址运算指针和地址运算 指针与数组指针与数组 l l 数组的指针和指向数组的指针变量数组的指针和指向数组的指针变量 l l 指向多维数组的指针指向多维数组的指针_数组指针数组指针 l l 元素为指针的数组元素为指针的数组_指针数组指针数组 指针与字符串指针与字符串 指针与动态内存分配指针与动态内存分配 多级指针多级指针 指针与数组作为函数的参数指针与数组作为函数的参数 指针作为函数的返回值指针作为函数的返回值_指针函数指针函数 指向函数的指针指向函数的指针_函数指针函数指针 带参数的带参数的mainmain函数函数 本章小结本章小结 1 . 内存内存 20002000 20012001 20022002 20052005 0 0 20032003 20042004 . . . 9.1 指针与指针变量的概念 1 1、内存地址内存地址内存中存储单元的编号内存中存储单元的编号 101102 201202 301302 401402 501502 601602 教学楼教学楼 教室号码

      2、教室号码 存储地址存储地址 教室教室 存储存储 单元单元 教室有容教室有容 量量 存储单元有存储单元有 大小大小( (字节单字节单 元、字单元元、字单元) ) 5050 存储存储 数据数据 注意:注意:内存单元的地址与内存单元中的数据是内存单元的地址与内存单元中的数据是 两个完全不同的概念。两个完全不同的概念。 2 内存内存 . . 0 0 20002000 20012001 20022002 20052005 20032003 20042004 . . 2、变量地址系统分配给变量的内存单元的起始地址 程序中程序中: : int i; int i; float k; float k; 内存中每个字节有一个编号内存中每个字节有一个编号-地址地址 i i k k 编译或函数调用时为其分配内存单元编译或函数调用时为其分配内存单元 变量变量是对程序中数据是对程序中数据 存储空间的抽象存储空间的抽象 i i的地的地 址址 k k的的 地址地址 注意:注意:在在TCTC或或BCBC下,系统将给变下,系统将给变 量量i i分配分配2 2字节字节的单元,而的单元,而VCVC下将是下将是 4 4字节字节

      3、的单元!的单元! 3 整型变量整型变量i i 变量变量i_pointeri_pointer . 1010 2000 2004 2006 2005 2001 2002 2003 3、指针与指针变量 l指针:一个变量的地址 l指针变量:专门存放变量地址的变量 20002000 指针变量指针变量 整型变量整型变量i i的内容的内容 指针变量指针变量i_pointeri_pointer的内容的内容 ( (是地址是地址) ) 变量的地址变量的地址 指针指针 指针变量指针变量 变量变量 变量地址变量地址( (指针指针) ) 变量值变量值 指向指向 地址存入地址存入 指针变量指针变量 4 l 直接访问:按变量名来存取变量值 l 间接访问:通过存放变量地址的变量去访问变 量 例例 i = i = 2020; ; -直接访问直接访问 指针变量指针变量 . 2000 2004 2006 2005 整型变量整型变量 i i 1010 变量变量i i_pointer_pointer 2001 2002 2003 20002000 3 3 例例 * *i_pointeri_pointer = = 2020; ;

      4、 -间接访问间接访问 2020 8.1 指针变量的定义 4 4、变量值的存取方法、变量值的存取方法 将20送到i-pointer所指向的的单元中 5 指针变量指针变量 . 2000 2004 2006 2005 整型变量整型变量 i i 1010 变量变量i i_pointer_pointer 2001 2002 2003 20002000 整型变量整型变量 k k 1010 例例 k = i; k = i; k = *i_pointer; k = *i_pointer; -直接访问直接访问 -间接访问间接访问 6 8.2 指针变量 1.指针变量的定义 l一般形式: 存储类型 数据类型 *指针名; 合法标识符 指针变量本身的存储类型 表示定义指针变量 不是*运算符 例 int *p1,*p2; float *q ; static char *name; 注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量, 这个规定 的类型称为该指针变量的“基类型”。 4、指针变量定义后,变量

      5、值不确定,应用前必须 先赋值 指针的目标变量的数据类型 图 未初始化的指针 7 5、在指针变量说明中,“*”是类型说明符,表示 其后的变量是指针类型。 而表达式中出现的“*”则是一个运算符用以表示 指针变量所指的变量。 8 2.为什么要为指针变量定义类型: 对指针进行进行移动1个位置的操作,如果是 整数型,就意味着移动2个字节,如果是字符 型,就意味着移动1个字节。这就造成指针移 动的不确定性,所以需要规定一个基类型。 3.14 2.12 p P+1 4byte p P+1 P+2 P+3 1 2 3 4 2byte 9 3、指针变量的运算 指针运算符(“ p= /*把i的地址赋给p,让p其指向变量i */ 这里,*p与变量i是等价的。 10 定义后 : : : : 1000 1002 1004 i j p (1)优先级:高于算术运算符,低于正负号运算符 。 int i , j , *p; /*此行的“*”与下面的不同*/ p= *p=3; j=*p+2; p= a=3; p= printf(“%d %d %d“,p,*p, 输出结果: -44 3 -42 a的 地址 p的 地址 p所

      6、指向a的 内容 i_pointer-指针变量,它的内容是地址量 *i_pointer-指针的目标变量,它的内容是数据 int *pointer_1, *pointer_2; pointer_1= pointer_2= printf(“a=%d,b=%dn”,a,b); printf(“*pointer_1=%d,*pointer_2= %dn”,*pointer_1,*pointer_2) ; return 0; 定义两个指针变量 使pointer_1指向a 使pointer_2指向b 直接输出变量a和b的值 间接输出变量a和b的值 14 #include int main() int a=100,b=10; int *pointer_1, *pointer_2; pointer_1= pointer_2= printf(“a=%d,b=%dn”,a,b); printf(“*pointer_1=%d,*pointer_2= %dn”,*pointer_1,*pointer_2) ; return 0; 此处*与类型名在一起。 此时共同定义指针变量 此处*与指针变量一起使用。此 时代表

      7、指针变量所指向的变量 15 int *pointer_1, *pointer_2; a=100;b=10; pointer_1= pointer_2= printf(“%d,%dn“,a,b); printf(“%d,%dn“,*pointer_1, *pointer_2); 两个printf函数作用是相 同吗? 程序中有两处出现*pointer_1和*pointer_2作用一样吗? “pointer_1=i=3; * *i_pointeri_pointer=3;=3; 18 8.2.3 指针的赋值运算(=) 指针的赋值运算:就是把地址赋值给指针变量。 指针的赋值运算可以是以下2种方式: 使用取地址运算符,把地址值赋值给指针变量。 如:int i, *pi ; pi= 把指针变量的值赋给另一个指针变量。 如:int i,*pa,*pb; pa= pb=pa; 19 注意: 1.不允许把一个数赋予指针变量,故下面的赋值是错误的: 2. 被赋值的指针变量前不能再加“*”说明符,如写为 *p= p=1000; 3.指针变量间的赋值和引用应保证基类型相同。 若有定义: int *p , i ;

      8、 float *q , x ; 则:q= p= 20 例 main( ) int i=10; int *p; *p=i; printf(“%d”,*p); 危险! 例 main( ) int i=10,k; int *p; p= *p=i; printf(“%d”,*p); 指针变量必须先赋值,再使用 . 2000 2004 2006 2005 整型变量i 10 指针变量p 2001 2002 2003 随机 21 例例 intint i; i; int *p = int *p = ; 例例 void main ( )void main ( ) int i; int i; static int *p = static int *p = ( ( ) ) 不能用不能用autoauto变量的地址变量的地址 去初始化去初始化staticstatic型指针型指针 8.2.38.2.3、指针变量的赋值、指针变量的赋值 初始化赋值初始化赋值 存储类型存储类型 数据类型数据类型 * *指针名指针名 = = 初始地址值初始地址值; 赋给指针变量,赋给指针变量, 不是赋给目标变量不是赋给目标变量 变量必须

      9、变量必须已说明过已说明过 类型类型应一致应一致 例例 intint i; i; int *p = int *p = ; int *q = int *q = p p; ; 用已初始化指针变量作初值用已初始化指针变量作初值 22 例例 int int a; a; int *p; int *p; p = p = 赋值语句赋值赋值语句赋值 例例 int a = 20 ;int a = 20 ; int *p, *q; int *p, *q; p = p = q = p;q = p; 整型变量整型变量a a 指针变量指针变量p p 指针变量指针变量q q . 20002000 . . 2020 20002000 20002000 23 例:int i,j,*p1,*p2; i=a; j=b; p1= p2= p2=p1 *p2=*p1; 24 5、零指针与空类型指针 零指针:(空指针) l 定义: 指针变量值为零 l 表示: int * p = 0; p p指向地址为指向地址为0 0的单元的单元, 系统保证该单元不作它用系统保证该单元不作它用 表示指针变量值表示指针变量值没有意义没有意义 #define #define NULLNULL 0 0 int *p = NULL:int *p = NULL:

      《善于利用指针》由会员简****9分享,可在线阅读,更多相关《善于利用指针》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.