IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 指针变量的初步了解 -> 正文阅读

[C++知识库]指针变量的初步了解

指针变量

众所周知指针是C/C++中广泛使用的一种数据类型,能够方便的表示各种数据结构,使用数组和字符串,所以学习指针是我们在学习C语言中重要的一部分,下面我们来简单的认识一下指针变量。

一、指针变量的定义、赋值

使用指针前,我们需要定义一个指针变量,一般形式如下:

类型说明符 *变量名;

其中 * 表示这是一个指针变量,这与我们平常定义普通变量不同,下面我们来看看两者的区别;

1、普通变量的定义

int a=3;

这里定义了 a 是 int 型的,赋值为 3 。内存空间中,有一个位置存放 a 的值,对变量 a的存取操作实际上就是对这个内存空间的存取。内存空间的位置叫做地址,存放 3 的地址可以用到取操作符 & 对 a 运算得到:&a

1、指针变量的定义

int *p=NULL;

这里定义了一个指针变量 p ,p指向一个内存空间,里面存放的是一个内存地址NULL(其实就是0,表示特殊的空地址)

1、给指针变量赋值

p=&a;

这里表示把 a 的内存空间地址(比如XXX)给了 p 。
下面我们上代码

	int a = 3;
	int *p = NULL;
	p = &a;
	printf("%d %d %d",a,*p,p);

我们的输出则是

3 3 6487572

如果我们直接输出 p 的话,我们得到的则是一个奇怪的数,这个就是 a 的内存地址,而 *p 才是我们真正想要得到的 a 的值
显然,我们直接操作的是将 a 的地址存储到 p 中,通过这个地址 间接操作才能得到 a 的值 3 ;

下面我们来看一个简单的图解
在这里插入图片描述
实际上,*p 表示 p 指向的变量,而 p 中存放的是变量的地址,所以 *p 访问的就是 a,
也就是说 *p 与 a 其实是等价的。

二、指针的引用与运算

1、指针变量的初始化

1 、 int *p = NULL; — NULL是特殊的地址,叫零指针
2、 int *p = new(int) ; —申请一个空间给p,*p内容不确定
3、 int a; int *p = &a; —p初始化a的地址

2、指针变量的运算

如果我们对两个变量进行运算呢? 我们以加法运算为例:

	int a = 3 , b = 2;
	int t , t1;
	int *p , *k;
	p = &a;
	k = &b;
	t = a + b;
	t1 = *p + *k;
	printf("%d\n",t);
	printf("%d\n",t1);

如此看来,我们要对两个变量进行运算,可以转换成对两个指针的运算

即 有以下对应关系

p --------- &a
*p -------- a
*p=3 ----- a=3

3、无类型指针

一个指针,根据不同情况,可以指向不同的数据类型,这里我们就需要用到无类型指针
话不多说,上代码:

	int a=3;
	float b=3.5;
	void *p;//定义一个无类型指针 
	p=&a;
	printf("%d\n",*(int*)p);//必须明确p指向的空间的数据类型 
	p=&b;
	printf("%f\n",*(float*)p);

这里我们的输出如下

3
3.500000
4、多重指针

既然指针是指向其他类型的,那么指针本身也是一种类型;
在C++中,允许递归地指针指向指针的指针——多重指针
举个例子:

	int a=3;
	int *p;
	int **pp;//双重指针
	p=&a;
	pp=&p;//pp通过2次间接访问了a的值
	cout<<a<<" "<<*p<<" "<<**pp; 

输出

3  3  3
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:21:36  更:2021-09-24 10:22:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 4:21:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计