当前位置:首页 > 初赛 > 正文内容

信息学奥赛知识点(十四)----指针

亿万年的星光10个月前 (06-13)初赛827

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的值,这里可以这样理解:因为pint *类型,*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. }


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

2019年CSP-J 初赛题目及答案解析

2019年CSP-J 初赛题目及答案解析

扫码关注下面微信公共号,发送“CSPJ2019”获取文章答案查看详细解题过程:原版初赛题目下载链接:CSP-J相关资料 - 青少年编程知识记录 (codecoming.com)答案:解析:2019年普...

信息学奥赛知识点(二)----计算机结构及硬件

信息学奥赛知识点(二)----计算机结构及硬件

一、计算机系统构成计算机硬件计算机硬件主要由五大部分构成:运算器、控制器、存储器、输入设备、输出设备。其中运算器和控制器都在CPU中。中央处理器(CPU)(1)有运算器、控制器和一些寄存器组成运算器进...

信息学奥赛知识点(十二)----栈和队列

信息学奥赛知识点(十二)----栈和队列

一、栈栈是只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进行的压在底下,随后一件一件往上堆。取走时,只能从上面一件一件取。堆和取都在顶部进行。底部一般是不动的。栈就是一种类似桶堆积物品的数据结...

信息学奥赛知识点(五)----进制转换

信息学奥赛知识点(五)----进制转换

一、进位计数制的基本概念将数字符号按排列成数位,并遵照某种由低到高的进位方式计数表述数值的方法,称为计数制。1.十进制十进制计数由0,1,2,3,4,5,6,7,8,9共10个数字符号组成。相同数字符...

信息学奥赛知识点(四)----计算机语言

信息学奥赛知识点(四)----计算机语言

程序是一系列的操作步骤,计算机程序就是由人事先规定的计算机完成某项工作的操作步骤,每一个步骤具体内容由计算机能够理解的指令来描述,这些指令告诉计算机“做什么”和“怎么做”  &nb...

信息学奥赛知识点(六)----信息编码

信息学奥赛知识点(六)----信息编码

一、基本概念1.编码计算机要处理的数据除了数值数据以外,还有各类符号、图形、图像和声音等非数值数据。而计算机只能识别两个数字。要使计算机能处理这些信息,首先必须将各类信息转换成0和1表示的代码,这一过...