- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE 1
第六章 指 针
6.1 指针的概念
内存区的每一个字节有一个编号,这就是“地址”。
是取地址运算符,i是变量i的地址。
一个变量的地址称为该变量的指针。
如果一个变量是专门存放另一个变量的地址,则称它为指针变量。
6.2 变量与指针
6.2.1 定义指针变量
int i,j;
int *pi=i,*pj; //pi,pj是指向整型数据的指针变量。
double *pd;
pj=j;
一般的C++编译系统为每一个指针变量分配4个字节的存储单元。
6.2.2 引用指针变量
(1) 取地址运算符号
(2)* 指针运算符(或称间接引用运算符)
*p为指针变量p所指向的存储单元。
#include iostream.h
void main()
{
int var=8;
int* pointer;
pointer=var;
*pointer=5;
coutvar *pointer *(var)endl;
coutpointer pointer
var (*pointer)endl;
}
5 5 5
0x0064FDF0 0x0064FDF4 0x0064FDF0 0x0064FDF0
例6.1 通过指针变量访问整型变量
#include iostream
using namespace std;
void main()
{
int a,b;
int *p1,*p2;
a=100;b=10;
p1=a;p2=b;
couta bendl;
cout*p1 *p2endl;
}
100 10
100 10
*p1,*a的含义是什么?
例6.2 输入a和b两个整数,按先大后小的顺序输出(用指针变量处理)
#include iostream
using namespace std;
void main()
{
int *p1,*p2,*p,a,b;
cinab;
p1=a;p2=b;
if(ab)
{ p=p1;p1=p2;p2=p;}
couta=a b=bendl;
coutmax=*p1 min=*p2endl;
}
45 78
a=45 b=78
max=78 min=45
调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。
6.2.3 指针作为函数参数
例6.3 题目同例6.2
#include iostream
using namespace std;
void main()
{
void swap(int *p1,int *p2);
int *pointer_1,*pointer_2,a,b;
cinab;
if(ab) swap(a, b);
coutmax=a min=bendl;
}
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
45 78
max=78 min=45
例6.4 输入a,b,c三个整数,按由大到小的顺序输出。
#include iostream
using namespace std;
void main()
{
void exchange(int *,int *,int *);
int a,b,c,*p1,*p2,*p3;
cinabc;
p1=a;p2=b;p3=c;
exchange(p1,p2,p3);
couta b cendl;
}
void exchange(int *q1,int *q2,int *q3)
{
void swap(int *p1,int *p2);
if(*q1*q2)swap(q1,q2);//前两个if选出最大,
if(*q1*q3)swap(q1,q3);//放入q1所指的变量中
if(*q2*q3)swap(q2,q3);
}
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
12 -56 87
87 12 -56
6.3 指针与数组
6.3.1
在C++中,一个数组类型的操作数被自动转换为指向数组第一个元素的常量指针。
int a[10];int *p;
p=a[0]; 与语句 p=a; 等价。
int *q=a;*q=5;
如果p的初值a[0],则:
p+i和a+i就是a[i]的地址。
*(p+i)和*(a+i)就是a[i]。
p[i]和*(p+i)等价。(下标法和指针法)
int a[10];
coutaendl;
couta+1endl;
couta+2endl;
能够发现地址值差4
#includeiostream.h
voi
文档评论(0)