版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
……2111000100066地址21021121299910001001………………去211房间,那里有线索地址1000整数66第8章指针引例指针变量指向第8章指针inta;floatb;内存单元按字节编号
charc;
int:4字节
float:
4字节
char:
变量类型不同,占据的字节数不同变量所占存储单元首字节的编号就是变量的地址ab2000200220042006c2008…
1字节
0000000200010003……double:
8字节变量的地址
指针
变量的地址
指针变量
存放指针的变量指针变量的定义类型名*指针变量名1,*指针变量名2,...;如:int*i_p,*j_p;float*t;类型名(int、float、char等)规定了指针变量可以指向什么类型的变量。
*定义指针变量的标志第8章指针注意:*并不是变量名的一部分。注意:指针变量中只能存放规定类型的变量的地址。
指针
变量的地址
指针变量
存放指针的变量指针变量的定义类型名*指针变量名1,*指针变量名2,...;给指针变量赋地址值&取址运算符{inti=0,*i_p;i
i_p&ivoidmain()0……i_p=&i;指针变量i_p指向变量i第8章指针注意:只能用地址给指针变量赋值,不能用普通数据给指针变量赋值。
指针
变量的地址
指针变量
存放指针的变量指针变量的定义类型名*指针变量名1,*指针变量名2,...;给指针变量赋地址值&取址运算符{inti=0,*i_p;通过指针变量间接访问变量*i_p:访问指针变量i_p所指向的变量i
i_p&i*voidmain()
……}0……i_p=&i;3*i_p=3;i=3;指针变量i_p指向变量i第8章指针
间接访问运算符
变量的地址
存放指针的变量程序举例例1:以下程序段的输出结果是
.int*var,ab;ab=100;var=&ab;ab=*var+10;cout<<*var<<endl;varab100&ab110110…………例2:写出程序的运行结果……
intk=2,m=4,n=6;
int*pk=&k,*pm=&m,*p;*p=*pk*(*pm);
cout<<n<<endl;
……k2m4n6pk&kpm&mp&n8*pk*(*pm)*p=88k*m
p=&n;n=8#include<iostream.h>voidmain(){
inti=100,j=200;
int*p1,*p2;p1=&i;p2=&j;*p1=*p1+1;p1=p2;*p1=*p1+1;
cout<<i<<""<<j;}101201例3:写结果程序举例i100j200p1&ip2&j201101&j程序举例例4填空。该程序的功能是输入两个整数,然后按从小到大的顺序输出。voidmain(){
inta,b;
int*maxp,*minp;
cin>>a>>b;
maxp=
e
cout<<*minp<<""<<*maxp;
=a<b?&a:&b;}
minpa>b?&a:&b;#include<iostream.h>指向数组元素的指针变量以一维数组为例voidmain()a[0]a[1]a[2]a[3]a[4]指针变量的定义pa数组首地址赋给指针变量&a[0]pa=&a[0];a指针变量指向数组元素若pa指向a[0],for(i=0;i<5;i++)例:对数组进行输入输出。
{inta[5],i,*pa;则pa+i指向a[i]。通过指针访问数组元素……由于pa+i指向a[i],则*(pa+i)间接访问a[i]。for(i=0;i<5;i++)cout<<*(pa+i)<<"";}pa+1pa+4cin>>*(pa+i);
scanf("%d",pa+i);printf("%d
",*(pa+i);指针变量的运算pa
指针变量加一
以整型数组为例:voidmain()20002004200820122016a[0]a[1]a[2]a[3]a[4]
指向下一个数组元素。指针变量减一
{inta[5],*pa=a;pa++;pa-=2;pa+=3;2000200420162008pa+n的地址:
pa+n*dd与类型有关:
int:4float:4char:1指向上一个数组元素。……}指针变量的运算p1
以整型数组为例:20002004200820122016a[0]a[1]a[2]a[3]a[4]两个指针变量相减p1=&a[1];p2=&a[4];p2&a[1]&a[4]p2-p1的值是表示两个指针之间元素的个数。两个指针变量可以进行关系运算p1=&a[1];p2=&a[4];p1<p2的值是p1==p2的值是310指向一维数组的指针变量访问数组元素的方式下标法数组名指针
若p指向a[i]a[i]*(a+i)
若p指向a[0]则*(p+i)表示间接访问a[i]
(直接访问)则*p表示间接访问a[i]a[0]a[1]a[2]a[3]a[4]a……a+1a+4a[0]a[1]a[2]a[3]a[4]p&a[0]……p+1p+4p[i]a[i]#include<stdio.h>voidmain(){chara[]="Stu-Dent",*pa;
for(pa=a;*pa!='\0';pa++)if(*pa>='A'&&*pa<='Z')*pa=*pa+32;elseif(*pa>='a'&&*pa<='z')*pa=*pa-32;
puts(a);}例5:写结果。a[0]a[1]a[2]a[3]a[4]Stu-Dpa&a[0]ent\0a[5]a[6]a[7]a[8]s&a[1]T&a[2]U&a[3]&a[4]d&a[5]E&a[6]N&a[7]T&a[8]sTU-dENT程序举例#include<stdio.h>voidmain(){
inta[]={1,2,3,4,5,6,7,8,9,10};
int*p;p=a;
printf("%d\n",*p+9);}10#include<stdio.h>voidmain(){
inta[]={3,2,5,6,7,4};
int*p=a;p++;
printf("%d\n",*(p+3));}7例6:写结果程序举例例7:写结果。5程序举例#include<iostream.h>voidmain(){charb[4]="ABC",*s;s=b;do{
cout<<*s%10; s++;}while(*s!='0');}b[0]b[1]b[2]b[3]ABC\0s&b[0]&b[1]6&b[2]7&b[3]例8:写结果。ABC程序举例#include<stdio.h>voidmain(){charb[4]="ABC",*s;s=b;do{
puts(s); s++;}while(*s!='0');}b[0]b[1]b[2]b[3]ABC\0s&b[0]&b[1]BC&b[2]C&b[3]例9:输入12345678,写出以下程序的运行结果。#include<stdio.h>voidmain(){int
a[M],i,j,t,*p=a;for(i=0;i<M;i++)scanf("%d",a+i);i=0;j=M-1;while(i<j){t=p[i];p[i]=[j];p[j]=t;i++;j--;}for(i=0;i<M;i++,p++)printf("%3d",*p);a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]12345678ij8116722563345443
8
7
6
5
4
3
2
107程序举例#defineM8}p&a[0]p[0]p[1]p[2]p[3]p[4]p[5]p[6]p[7]&a[1]&a[2]&a[3]&a[4]&a[5]&a[6]&a[7]作业实验指导书P136第1、2大题课本P173第一、二、三大题编译预处理在编译源程序之前,由预处理器执行的指令。目的是对源程序进行一些加工处理。预处理指令以“#”开头,每条指令占一行。末尾不加分号。三种类型:1.文件包含指令2.宏定义指令3.条件编译指令预处理指令文件包含
意义在一个文件中包含另一个文件的内容Acpp1.cppBstdio.h#include<stdio.h>BAcpp1.cpp
一般形式#include"文件名"#include<文件名><>
预处理器到标准目录下查找该文件""先在当前目录查找,找不到再到标准目录找宏定义不带参数的宏定义用一个名字代表一串文字。#define标识符文本信息#definePI3.1415926#define标识符用文本信息替换宏名带参数的宏定义#define宏名(参数表)文本信息文本中要包含参数表中的参数宏展开时要先进行参数替换#defineS(a,b)a*barea=S(3,2);3*2宏定义命令宏名voidmain(){s=PI*r*r;}预处理时进行宏展开3.1415926voidmain(){}3
a2
b…………
宏定义举例例1以下程序中for循环循环的次数是多少?程序的运行结果是什么?
#defineN2#defineMN+1#defineNUM(M+1)*M/2voidmain(){inti;
for(i=1;i<=NUM;i++);
printf("%d\n",i);}宏展开(1)(M+1)*M/2(2)(N+1+1)*N+1/2(3)(2+1+1)*2+1/2=8答:执行8次结果:9N+1M2
N#include<stdio.h>NUM(M+1)*M/2NUM
宏定义举例例2写结果。
F(m+n)(1)P*m+n*m+n(2)4*m+n*m+n20m+n
x4
P#include<iostream.h>#defineP4#defineF(x)P*x*xvoidmain(){intm=2,n=4;
cout<<F(m+n)<<endl;}=20宏展开
宏定义举例例3写结果。
F(m+n)(1)P*(m+n)*(m+n)(2)4*(m+n)*(m+n)36m+n
x4
P#include<iostream.h>#defineP4#defineF(x)P*(x)*(x)voidmain(){intm=2,n=4;
cout<<4/F(m+n)<<endl;}4/4*(m+n)*(m+n)宏展开
宏定义举例例4写结果。
F(m+n)(1)(P*(m+n)*(m+n))(2)(4*(m+n)*(m+n))0m+n
x4
P#include<iostream.h>#defineP4#defineF(x)(P*(x)*(x))voidmain(){intm=2,n=4;
cout<<4/F(m+n)<<endl;}4/(4*(m+n)*(m+n))
宏定义举例例5写结果。
f(a-1)
a-1*a-1*a-1
f((a-1))-48a-1x(a-1)
x#include<iostream.h>#definef(x)x*x*xvoidmain(){inta=3,s,t;s=f(a-1);t=f((a-1));
cout<<s<<""<<t<<endl;}(a-1)*(a-1)*(a-1)1、编写程序,计算两个矩阵(均为2行2列)之积。输入分2*2行:前两行为第一个矩阵,后两行为第二个矩阵。样例输入:
12
45
35
17
2、编写程序,输出矩阵(3行3列)的左上三角。样例输入:
123
456
789
作业样例输出:
519
1755
样例输出:
123
45
7
3、编写程序,输出n层正方形图案。正方形图案最外层是第一层,每层用的数字和层数相同。样例输入:3
4、编写程序,计算二维数组中各行之和、各列之和以及所有元素之和。样例输入:
23
123
456作业样例输出:
11111
12221
12321
12221
11111
样例输出:
615
579
21
5、编写程序,找出m行n列的二维数组中每行元素的最大值以及每列元素的最小值。输入分m+1行:第一行为m和n的值,以下m行代表二维数组,其中每一行包括n个数。输出分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版菁离婚后子女抚养权争议调解合同样本202篇
- 2024版医疗器械抵押借款合同范文解读3篇
- 2024年度上海体育场馆改造工程合同
- 2024年度充电桩设备安装、运营与维护合同范本3篇
- 2024年商铺场地租赁合同范本:含无人机航拍服务租赁协议3篇
- 2024年度白酒产品售后服务与质量保证合同3篇
- 2024年度互联网企业人力资源外包工资模板及绩效考核合同3篇
- 2024版个人贷款保险合同范本3篇
- 2024年物流行业碳排放管理合同3篇
- 2024外墙漆购销与施工过程环保监测及治理合同3篇
- 我是小交警(教学设计)-2024-2025 学年六年级上册综合实践活动蒙沪版
- 分形缺陷的电磁波调控
- 2024全球智能家居市场洞察报告
- 艺术中国智慧树知到答案2024年上海戏剧学院
- TZGCSC 009-2024 数字道路路侧雷视一体机技术规范
- 中职汽修专业《汽车维修基础》说课稿
- Unit 6 Meet my family 单元整体教学说课(教学设计)-2024-2025学年人教PEP版英语四年级上册
- 外商投资准入特别管理措施(负面清单)(2024年版)
- 铭记历史 勿忘国耻九一八事变教育主题班会课件
- 气候可行性论证技术规范第8部分:能源化工类园区
- 计算机组装与维护-考试附有答案
评论
0/150
提交评论