内容正文:
学科竞赛编程
C++
NOIP
NOI
IOI
1
1
PART ONE
指针概念
指针变量的定义
指针变量的赋值
指针的引用
指针的运算
int a;
int *p;
定义了变量a
定义了指针变量p
均为 int 型
int *p;
p=&a;
或者
int *p=&a;
定义了变量a
定义了指针变量p
均为 int 型
cout<<*p;
输出指针所
指向变量的值
1
PART ONE
内存
10
int x
112053
变量
数据
112053
int *p
指针
指针 p 指向变量 x
1. 指针与变量
1
PART ONE
案例1 : 输入两个不同的数,通过指针对两个数进行
相加和相乘。
输入:两个整数a,b(0<=a<=b<=1000)
输出:输出共两行,第一行通过指针输出两个数,第二行通过指针 输出两个数的和与乘积。
【样例输入】
10 20
【样例输出】
a=10,b=20
s=30,t=200
1
PART ONE
第二步: 通过指针计算a和b的和与乘积,并将和赋给s,讲乘积赋给t。
s=*pa+*pb;
t=*pa * *pb;
第三步: 输出两个数,以及两个数的和与乘积
cout<<”a=”<<*pa<<”,”<<”b=”<<*pb<<endl;
cout<<”s=”<<s<<”,”<<”t=”<<t;
【过程分析】
第一步: 先定义两个变量a和b,然后定义两个指针变量pa和pb,并让指针pa指向a,pb指向b,再定义两个变量s和t,分别代表a和b的和与乘积。
int a,b; int *pa,*pb; int s,t;
pa=&a;
pb=&b;
1
PART ONE
完整代码
#include<iostream>
using namespace std;
int main()
{
int a,b;
int *pa,*pb;
int s,t;
pa=&a;
pb=&b;
s=*pa+*pb;
t=*pa * *pb;
cout<<”a=”<<*pa<<”,”<<”b=”<<*pb<<endl;
cout<<”s=”<<s<<”,”<<”t=”<<t;
}
1
PART ONE
指针的加减运算
2. 指针与一维数组
int a=10,*p=&a;
cout<<p;
cout<<p+1;
cout<<p-1;
你看到了什么结果呢
1
PART ONE
指针的移动
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
访问数组的元素有两种方式,第一种是通过下标,第二种是通过指针来访问,指针指向数组的首地址就叫做指针指向了数组。
int a=[8]={1,2,3,4,5,6,7,8},*p;
p=a; p=&a[0]; //指针指向数组的首地址
指针的移动是地址的移动。
p
p=&a[0]
p
p=&a[1]
p
p=&a[2]
p
p=&a[3]
p
p=&a[4]
p
p=&a[5]
p
p=&a[6]
p
p=&a[7]
1
PART ONE
练习1 : 用指针操作数组的输出:
#include <iostream>
using namespace std;
int main ()
{
int a[3] = {1, 2, 3};
int *p;
// 指针中的数组地址
p= a;
for (int i = 0; i < 3; i++)
{
cout << "a[" << i << "]的内存地址为 "<< p << endl;
cout << "a[" << i << "] 的值为 "<< *p << endl;
// 移动到下一个位置
p++;
}
return 0;
}
定义长度为3的数组和一个指针,用该指针操作数组的输出。
1
PART ONE
练习2 : 用指针操作数组的输入与输出 :
1
PART ONE
①用字符数组存放一个字符串,然后输出该字符串。
3. 指针与字符串
你学过哪种方法呢
在c++中,我们可以有两种方式访问字符串
② 用字符指针指向一个字
符串,可以不定义字符
数组
1
PART ONE
操作字符串
(1)用字符数组存放一个字符串,然后输出该字符串。
int main()
{
char str[ ]=”I Love Chin