信息学奥赛知识点(十四)----指针
3.1 定义
指针就是地址。
指针变量定义形式: 类型说明符 *变量名 例如:int *a;
含义:定义了一个int *类型变量,名称为a。(只能存储int *类型)
注意:int *类型和int 类型不一样。
3.2 指针的赋值
实际操作中,“&”符号表示“取地址符”。(区别与&&和按位与&,使用场景不同)。比如下面的代码:
1. #include<iostream>
2. #include<cstdio>
3. using namespace std;
4. int main() {
5. int a=3;
6. int *p=NULL;
7. p=&a;
8. cout<<"a的值"<<a<<endl; //3
9. cout<<"p的值"<<p<<endl; //0x22fe34
10. cout<<"*p的值"<<*p<<endl; //3
11. return 0;
12. }
其中,第7行的“&”表示取变量a的地址,赋值给p变量,而p是指针类型,可以保存地址。
用scanf读取数据的时候,也会写作scanf(“%d”,&a); 这里面的“&”也是取地址符号。
第10行的结果是3,也就是a的值,这里可以这样理解:因为p是int *类型,*p等价于*(int *),这里可以“负负得正”的思想来记录结果,也就是指向了int *这个指针所指向的变量。
3.3 指针与数组
指向数组的指针变量称为数组指针变量。“数组是内存上一块连续的空间”。数组名就是这块连续空间的首地址。
1. #include<iostream>
2. #include<cstdio>
3. using namespace std;
4. int main() {
5. int a[10];
6. for(int i=0; i<5; i++) {
7. scanf("%d",a+i);
8. }
9. for(int i=0; i<5; i++) {
10. printf("%d ", *(a+i));
11. }
12. return 0;
13. }
1. #include<iostream>
2. #include<cstdio>
3. using namespace std;
4. int main() {
5. int a[10]= {1,2,3,4,5};
6. int *pa=a;
7. cout<<a[0]<<endl; //结果是1
8. cout<<pa<<endl; //0x70fdf0
9. cout<<*pa<<endl; //结果是1
10. pa++;
11. cout<<pa<<endl; //0x70fdf4
12. cout<<*pa<<endl; //2
13. return 0;
14. }
3.4 指针与函数
//不能完成交换的例子
1. #include<iostream>
2. #include<cstdio>
3. #include<cstring>
4. using namespace std;
5. void swap(int x, int y) {
6. int a=x;
7. x=y;
8. y=a;
9. cout<<x<<" "<<y<<endl; // 4 3
10. }
11. int main() {
12. int a=3,b=4;
13. swap(a,b);
14. cout<<a<<" "<<b<<endl; // 3 4
15. return 0;
//能完成交换的例子
1. #include<iostream>
2. #include<cstdio>
3. #include<cstring>
4. using namespace std;
5. void swap(int &x, int &y) {
6. int a=x;
7. x=y;
8. y=a;
9. cout<<x<<" "<<y<<endl; // 4 3
10. }
11. int main() {
12. int a=3,b=4;
13. swap(a,b);
14. cout<<a<<" "<<b<<endl; // 4 3
15. return 0;
//指针作为参数的例子1
1. #include<iostream>
2. #include<cstdio>
3. #include<cstring>
4. using namespace std;
5. void swap(int *x, int *y) {
6. int t =*x;
7. *x= *y;
8. *y=t;
9. cout<<*x<<" "<<*y<<endl; // 4 3
10. }
11. int main() {
12. int a=3,b=4;
13. swap(&a,&b);
14. cout<<a<<" "<<b<<endl; // 4 3
15. return 0;
//指针作为参数的例子2
1. #include<iostream>
2. #include<cstdio>
3. #include<cstring>
4. using namespace std;
5. void swap(int *x, int *y) {
6. *x=5;
7. }
8. int main() {
9. int a=3,b=4;
10. swap(&a,&b);
11. cout<<a<<" "<<b<<endl; //5 4
12. return 0;
13. }
(adsbygoogle = window.adsbygoogle || []).push({});