指针及其应用1——指针的基本使用

简介: 指针及其应用1——指针的基本使用

指针变量的定义、赋值

一般形式为: 类型说明符  *变量名;      

其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示该指 针变量所指向的变量的数据类型。

1. int a=0,b=1;
2. int c[]={1,2,3,4,5,6,7,8,9,10};
3. int *p;        //定义一个指针 
4. p=&a;          //让p指向a 
5. (*p)=3;        //相当于a=3; 
6. (*p)=b;        //相当于a=b,此时a等于1 
7. //p=b;         //非法操作,左边是int*,右边是int,类型不匹配 
8. p=&b;          //让p指向b,从此p和a没有关系了 
9. p=&c[6];       //让p指向c[6],p和b又没关系了 
10. cout<<*p;      //输出p指向的变量值,即c[6] 
11. p++;           //现在p指向了c[7]; 
12. p=NULL;        //表示p没有指向任何变量 
13. cout<<*p;      //由于NULL(0)是一段无意义的地址,所以程序有可能崩溃

【例 1】 输入两个不同的数,通过指针对两个数进行相加和相乘,并输出。

1. #include<stdio.h>
2. #include<iostream>
3. using namespace std;
4. int main()
5. {
6.  int a,b,s,t,*pa,*pb;
7.  pa=&a;pb=&b;
8.  a=10;b=20;
9.  s=*pa+*pb;
10.   t=*pa**pb;
11.   printf("a=%d,b=%d\n",*pa,*pb);
12.   printf("s=%d,t=%d",s,t); 
13.   return 0;
14.  }

指针变量的+、-运算 指针变量的内容是内存地址,它有两个常用的运算:加、减,这两个运算一般都是配合 数组操作的。

【例 2】输入 N 个整数,使用指针变量访问输出。

1. #include<stdio.h>
2. #include<iostream>
3. using namespace std;
4. int a[101],n;
5. int main()
6. {
7.  scanf("%d",&n);
8.  for(int i=1;i<=n;i++)
9.    scanf("%d",&a[i]); 
10.   int *p=&a[1];//定义指针变量int p并初始化为数组开始元素的地址 
11.   for(int i=1;i<=n;i++){
12.     printf("%d ",*p);
13.     p++;//p指向下一个数 
14.   }
15.   return 0;
16.  }

输入:4

         2 1 6 0

输出:2 1 6 0  

无类型指针

有时候,一个指针根据不同的情况,指向的内容是不同类型的值,我们可以先不明确定义它的类型,只是定义一个无类型的指针,以后根据需要再用强制类型转换的方法明确它的 类型。

【例 3】无类型指针运用举例。

1. using namespace std;
2. int a=10;
3. double b=3.5;
4. void *p; 
5. int main()
6. {
7.  p=&a;//p的地址赋值 
8.  cout<<*(int*)p<<" ";//必须明确p指向的空间数据类型 
9.  p=&b;
10.   cout<<*(double*)p<<endl;
11.   return 0;
12.  }

输出:10 3.5

【说明】 必须明确 p 指向的空间的数据类型,类型不一样的不仅空间大小不相同,储存的格式也不同。

如果把 cout<<*(double*)p<<endl;改成 cout<<*(long long*)p<<endl;输出的结果将 是:4615063718147915776。

多重指针

既然指针是指向其他类型的,指针本身也是一种类型。 C++允许递归地指针指向指针的指针——多重指针。

【例 4】双重指针运用举例。

1. #include<stdio.h>
2. #include<iostream>
3. using namespace std;
4. int a=10;
5. int *p;
6. int **pp; //定义双重指针 
7. int main()
8. {
9.  p=&a;//p的地址赋值 
10.   pp=&p;//将pp指向p 
11.   printf("%d=%d=%d\n",a,*p,**pp);//**pp通过两次间接访问了a的变量的值10 
12.   return 0;
13.  }

输出: 10=10=10

【说明】多重指针除了可以多次“间接”访问数据,OI 上主要的应用是动态的多维数组。

相关文章
|
5月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
74 1
|
2月前
|
传感器 物联网 大数据
C 指针在物联网的应用
在物联网(IoT)中,C 语言及其指针功能广泛应用于嵌入式系统。C 指针在内存管理、设备驱动、数据结构处理、传感器通信等方面发挥关键作用,如动态分配内存、直接访问硬件寄存器、传递复杂数据结构等,有效提升了资源受限环境下的性能和灵活性。通过函数指针和省电模式管理,还能实现事件驱动编程和节能目标,使 C 语言成为 IoT 开发的重要工具。
67 12
|
2月前
|
存储 安全 C语言
C语言 二级指针应用场景
本文介绍了二级指针在 C 语言中的应用,
|
3月前
|
算法 Java
双指针在数组遍历中的应用
文章深入探讨了双指针技术在数组遍历中的应用,通过实战例子详细解释了快慢指针和首尾指针的不同用法,并提供了解决LeetCode相关问题的Java代码实现。
|
3月前
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用
|
5月前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```
|
6月前
|
存储 程序员 C语言
C语言中的函数指针及其应用技术
C语言中的函数指针及其应用技术
73 2
|
6月前
|
C++
多重指针:深入解析、应用与示例
多重指针:深入解析、应用与示例
|
6月前
|
存储 算法 C++
函数的指针:理解与应用
函数的指针:理解与应用
31 1
|
5月前
|
存储 C语言
C语言数组指针详解与应用
C语言数组指针详解与应用