C++语言程序设计第十四讲_第1页
C++语言程序设计第十四讲_第2页
C++语言程序设计第十四讲_第3页
C++语言程序设计第十四讲_第4页
C++语言程序设计第十四讲_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

……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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论