




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、# include <stdio.h>Void g(int*p,int*q)*p=1;*q=2;Int main(void)Int a=3,b=5;Int f(int i,int j) 指针的重要性 表示一些复杂的数据结构 return 100; 快速传递数据/ return 88;error 使函数返回一个以上的值能直接访问硬件Int main (void) 能方便处理字符串是理解面向对象语言中引用的基础Int a=3,b=5; 总结:指针是 C 语言的灵魂指针的定义地址内存单元的编号从零开始的非负整数范围: 4G指针1. 指针就是地址,地址就是指针2. 指针变量是存放地址的变量
2、3. 指针和指针变量是两个不同的概念4. 叙述时通常把指针变量简称为指针,实际它们含义不一样5. 指针的本质就是一个操作受限的非负整数指针的分类基本类型指针(重要)#include<stdio.h> int main(void)int *p; /p 是变量的名字, int* 表示 p 变量存放的是 int 类型变量的地址Int*p; 不表示定义了一个名字叫做 *p 的变量Int*p; 应该理解为: p 是变量名, p 变量的数据类型是 int* 类型所谓 int* 类型,实际就是存放 int 变量地址的类型int i=3;char ch= 'A'p=&i;
3、/OK1.p 保存了 i 的地址,因此 p 指向 i2. p不是i, i也不是p,修改p的值不影响i的值,修改i的值也不影响p的值3. 如果一个指针变量指向了某个普通变量,则*指针变量 完全等同于 普通变量例:若p指向i,则*p=i (*p和i可互相替换)p=&ch;/error/p=i; /error, 因为类型不一致, p 只能存放 int 类型变量的地址,不能存放 int 类型变量/P=55;/error, 原因同上return 0 ;附注:?*的含义:1. 乘法2. 定义指针变量Int*p; /定义了一个名字叫做p的变量,int*表示p只能存放int变量的地址3. 指针运算符该
4、运算符放在已经定义好的指针变量的前面 如果 p 是一个已经定义好的指针变量则*p表示以p的内容为地址的变量?如何通过被调函数修改主调函数普通变量的值1. 实参必须为该普通变量的地址 &.2. 形参必须为指针变量 *.例子:经典指针程序:互换数值3. 在被调函数中通过 *形参名 = 的方式就可以修改主调函数相关变量的值#include<stdio.h> #include<stdio.h>形参和实参是不同的变量,修改形参不会改变实参#include<stdio.h>void huhuan ( int a, int b ) void huhuan2 ( i
5、nt *p, int *q ) ?指针常见错误void huhuan3 ( int *p, int*q )#include<stdio.h>/形参的名字是p和q,接收实参数 据的是p和q,而不是*p和*qint t;t=a;a=b;b=t;return;int main(void)int a=3;int b=5;huhuan(a,b);Int main(void)int *t;/如果要互换p和q的值,则 t 必须是int* ,不能是t=p;Int i=5;p=q;Int*p;q=t;Int*q;return;P=&i;/*q=p;/error语法编译会出错int main(
6、void)/*q=*p;/errorP=q;/q 是垃圾值, q 赋给 p, p 也是垃圾值 int a=3;printf( “%dn”,*q); /13 行int b=5;intint t;如果要互换*p和*q的值,则t必须是int,不能是int*t=*p;/p 是 int* , *p 是 int*p=*q;*q=t;return;int main(void)/*q的空间是属于本程序的,所以本程序可以读写int a=q.的内容,但是如果q内部是垃圾值,则本程序不能读写int的内容因为此时 *q 所代表的内存单元的控制限权并没有分配给本程序所以本程序运行到 13行时就会立即出错 */retur
7、n 0;#in dudevstdio.h-1 -2 -3 4 5 -6# inuc函数可以输出任何一个一维数voidFf的 n内*容pArr,i nt le n)# include<stdio.h> pA0id=8?指针变量恤 行Void OutArr(int*pArr,int len) int maiint(vi ;oid)Int i;for(i=0,i<len#,i+nc+liu) de<stdio.h>#includf(eb<,6s)t;diIon.thm> ain(void)For(i=0;i<len;+i)int a6=P1?一个編量到
8、底占几个字瓜main(void Printf( “%dn ”,pArri);pr/i/n*t(fp(f(a,6);Int main(void)printf( %dn询3阳功&能:返回值就是该数据类型所制字节数19行若写为&a3则输出结果为0f £楙)地址罚严6街做邮1 n” Wf( double)=8 OutArr(a,5);Void f(int*pArr,int len)int a5=1,2,3,4,5;1 99 22 33 0 0 0 0 0 0 0 0 pArr2=10;0 0 0 0 0 0 0 0 0 0 0 0 0 0int b6=-1,-2,-3,4,5
9、,-6;0 0 0 0 0 0 0 0 0 0 0 0 0 0 指针变量不能相加,不能相乘tcg相除;99辰33Arr+2)=*瞬=代0 0 0 0 0 0 可以相减(仅当两个指针变量指向的 是同一块连续空间中的0 0不0同0存0储0空0 0间0) 0 0 0 0 0 f(a,5);/a 是 int* 0 0 0 0 0 0 0 0 0 0 0 0 0 0*(b+i) int i=5;int a6=1,2,3,4,5,6Int jof (数据类型)mt j=gprintf( “%dn”,a2);指针和数组指针和一维数组?一维数组名一维数组名是个指针常量它存放的是一维数组第一个元素的地址?下标和
10、指针的关系如果 p 是个指针变量,则 pi 永远等价于 *(p+i)?确定一个一维数组需要几个参数(如果一个函数要处理一个一维数组,则需要接收该数组的哪些信息)需要两个参数:数组第一个元素的地址数组的长度int main(void)# include<stdio.h>Return 0;Int a5; /a=&a2;/error 因为 a 是常量p=&a1;sizeof (变量名)功能:返回值是该变量所占的字节数 假设 p 指向 char 类型变量( 1 个字节) 假设 q 指向 int 类型变量( 4 个字节) 假设 r 指向 double 类型变量( 8 个字节)#include<stdio.h>指针和二维数纟ma in (void)4 4 4Press any key to continue指针和函数指针和结构体多级指针专题: char ch='A'Int i=99;Double x=66.6Char * p=&ch;动态内存分配(重难点)Int *q=&i;传统数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 胸外科手术疼痛管理
- 秋冬预防感冒知识
- 2024濮阳县职业教育培训中心工作人员招聘考试及答案
- 2024海南珠江源高级职业技术学校工作人员招聘考试及答案
- 设备保养与维修承包合同书
- 汽车托管租赁合同全新趋势分析
- 金属工艺品销售合同
- 房屋租赁居间合同书
- 标准化的驾校场地租赁合同模板
- 合伙合同债务分割协议范文
- 湖北省武汉市外国语学校2024-2025学年九年级下学期3月月考数学试卷 (原卷版+解析版)
- 高中生社会实践证明
- 危险源辨识、风险评价清单(市政(管道)工程)
- 05 Maxwell-RMxprt参数化与优化设置
- 人卫版内科学第九章白血病(第1-2节)
- TSG 81-2022 场(厂)内专用机动车辆安全技术规程
- 【教学课件】飞行校验课程
- 挡墙施工危险源辨识及风险评价
- 七下:欧洲西部
- 互调分析仪基础知识及使用
- 花篮式悬挑脚手架施工方案(附计算书)内容
评论
0/150
提交评论