C++ 指向 Void 的指针

2023-05-16

C++ 指向 Void 的指针

在 C++ 中,不能将一种数据类型的变量地址赋值给另一种数据类型的指针。

// 指针是int类型
int *ptr;

// 变量为双精度类型
double d = 9.0;

// 错误
// 无法将 double* 分配给 int*
ptr = &d;

错误发生是因为地址是double类型变量。但是,指针是int类型的。

在这种情况下,我们可以在 C++中使用指向 void的指针(void pointers)。

// 空指针
void *ptr;

double d = 9.0;

// 有效代码
ptr = &d;

void 指针是一种通用指针,当不知道指针指向的变量的数据类型时使用。

示例1(C++空指针):

#include <iostream>
using namespace std;

int main() {
    void* ptr;
    float f = 2.5f;

    // 将float地址分配给 void
    ptr = &f;

    cout << &f << endl;
    cout << ptr << endl;

    return 0;
}

结果: 

void空类型一样,void 指针不能被取消引用。

void* ptr;
float* fptr;
float f = 2.5;

// 将float地址分配给 void 指针
ptr = &f;
cout << *ptr << endl;  // 错误

// 将float地址分配给float指针
fptr = &f;
cout << *fptr << endl;   //有效

示例2(打印Void指针的内容):

要打印 void 指针的内容,使用static_cast运算符。它将指针从void*类型转换为指针存储的地址的相应数据类型:

#include <iostream>
using namespace std;

int main() {
	void* ptr;
	float f = 2.5f;

	// 将float地址分配给 void 指针
	ptr = &f;

	cout << "指针的内容为";
	//使用类型转换打印指针内容
	cout << *(static_cast<float*>(ptr));

	return 0;
}

结果:

也可以使用 C 风格的转换来打印值。

// 有效
cout << *((float*)ptr);

Note:void 指针不能用于存储带有 const 或 volatile 限定符的变量的地址。

void *ptr;
const double d = 9.0;

// 错误:从 const void* 到 void* 的无效转换
ptr = &d;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 指向 Void 的指针 的相关文章

  • void 与 void *

    void xff1a 无类型 对函数返回的限定 当函数不需要返回值值时 xff0c 必须使用void限定 xff0c 这就是我们所说的第一种情况 例如 xff1a void func xff08 int a char b xff09 对函数
  • c#中设计器中窗体释放  protected override void Dispose(bool disposing)改写解决部分窗体线程释放不彻底问题

    c 中设计器中窗体释放 protected override void Dispose bool disposing 改写解决部分窗体线程释放不彻底问题 lt summary gt 清理所有正在使用的资源 lt summary gt lt
  • C++ 中“(void) new”是什么意思?

    我一直在看 Qttutorial它使用了我以前从未见过的结构 void new QShortcut Qt Key Enter this SLOT fire void new QShortcut Qt Key Return this SLOT
  • 删除void指针是否保证删除正确的大小? [复制]

    这个问题在这里已经有答案了 可能的重复 删除空指针安全吗 说我有一个new分配给一个名为MyClass分配很简单 MyClass myClassPtr new MyClass 我存储了对列表的引用void 我简单地说 myListOfPoi
  • 异步任务与异步无效

    这可能是一个非常愚蠢的问题 但我有以下几行代码将 RAW 图像转换为 BitmapImages public async void CreateImageThumbnails string imagePath int imgId await
  • 使用 C void 参数“void foo(void)”更好还是不使用“void foo()”更好? [复制]

    这个问题在这里已经有答案了 什么是更好的 void foo or void foo void 对于 void 它看起来丑陋且不一致 但有人告诉我它很好 这是真的 编辑 我知道一些旧的编译器会做奇怪的事情 但如果我只使用 GCC 是void
  • 为什么一元 * 运算符没有“操作数不得是指向 void 的指针”的约束?

    C2x 6 5 3 2 地址和间接运算符 约束 2 一元 运算符的操作数应为指针类型 为什么没有 操作数不能是指向的指针 的约束void 虽然可以从以下推论 C2x 6 5 3 2 地址和间接运算符 语义 4 The 一元 运算符表示间接
  • 我可以在返回 void 的函数中使用 return 语句吗?

    我必须返回到递归的上一级 下面的语法对吗 void f some code here return 是的 您可以从 void 函数返回 有趣的是 您还可以从 void 函数返回 void 例如 void foo return void 正如
  • 等待 async void 方法

    我怎样才能等待async void方法来完成它的工作 例如 我有一个如下所示的函数 async void LoadBlahBlah await blah 现在我想确保在继续其他地方之前所有内容都已加载 最佳实践是标记功能async void
  • 类构造函数默认为 void 吗?

    我一直在阅读 C 中的类构造函数 示例显示重载类构造函数 而且他们所有人都没有void关键字并且它们都没有返回值 e g public Class myClass public myClass public myClass int id o
  • 在Java中,是否可以转换为void(而不是Void)?

    我可以在 X 中添加任何内容来使以下工作正常进行 Object o void X void 理论上是一个原语 尽管大多数人不同意 甚至我怀疑 你不能将一个对象投射到它上面 最接近这一点的是 InvocableHandler 可以return
  • 什么是System.Void?

    我知道声明的方法void不返回任何内容 但似乎在 C 中 void不仅仅是一个关键字 而是一个真实的类型 void是一个别名System Void like int那是为了System Int32 为什么我不允许使用该类型 这没有任何意义
  • 现代 C 和 C++ 中是否已弃用 f(void)? [复制]

    这个问题在这里已经有答案了 我目前正在重构 整理 C 项目中使用的一些旧 C 代码 并经常看到以下函数 int f void 我倾向于写成 int f 是否有任何理由不在整个代码库中将 void 替换为 以提高一致性 或者两者之间是否存在我
  • enable_if:不带参数的 void 成员函数的最小示例

    我正在努力更好地理解std enable if在 C 11 中 并一直在尝试编写一个最小的示例 一个类A具有成员函数void foo 根据类型有不同的实现T来自类模板 下面的代码给出了所需的结果 但我还没有完全理解它 为什么版本V2工作 但
  • 将向量作为 void 指针传递给函数

    我有一个回调函数 需要一个void 作为传递参数的参数 我想将向量传递给函数 该函数将被多次调用 因此在回调过程完成后 我希望能够迭代所有已调用的元素push back 通过回调 static void cb void data vecto
  • 递归 C void 函数和 return 关键字

    有人知道以下之间的内部区别 void RecFoo1 int bar if bar 0 return RecFoo1 bar 1 and void RecFoo2 int bar if bar 0 return return RecFoo2
  • (void)var 实际上做了什么?

    考虑以下main int main int argc char argv return 0 编译后cc Wall Wextra 生成 未使用的参数 的警告 当我不需要在函数中使用参数时 例如在信号处理函数 http en wikipedia
  • 将 void* 作为函数调用而不声明函数指针

    我已经搜索过 但找不到任何结果 我的术语可能有问题 所以如果以前有人问过这个问题 请原谅我 我想知道是否有一种简单的方法可以调用void 作为 C 中的函数 无需首先声明函数指针 然后为函数指针分配地址 IE 假设要调用的函数是类型void
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • 为什么没有参数的函数(与实际函数定义相比)可以编译?

    我刚刚看到某人的 C 代码 我很困惑为什么要编译它 有两点我不明白 The 函数原型与实际函数定义相比没有参数 中的参数函数定义没有类型 include

随机推荐

  • Docker随笔,从基础到入门

    实验环境 xff1a centos7 7 防火墙和selinux提前关闭 一 Docker基本概念 Docker系统有两个程序 xff1a docker服务端和docker客户端 docker服务端是一个服务进程 xff0c 管理着所有的容
  • cuda、torch、torchvision对应版本以及安装

    查找torch与torchvision对应版本 匹配情况如下 xff1a 1 在线下载 xff1a 在pytorch官网选择相应的历史版本 xff0c 使用conda或者pip安装 xff0c 使用官网的镜像下载很慢 xff0c 建议使用其
  • CUDA在VS下编程出现MSB3721错误

    CUDA在VS下编程出现MSB3721错误 一 错误示范二 解决方式 一 错误示范 我们在VS环境下进行CUDA编程的时候可能会出现如下MSB1721的错误 二 解决方式 首先确保好是在x64平台下运行 xff1a 确定无误然后如果还有问题
  • ROS:关于node启动问题

    相关代码 xff1a lt node pkg 61 34 turn on wheeltec robot 34 type 61 34 wheeltec robot node 34 name 61 34 wheeltec robot 34 ou
  • Altium Designer 的一些使用技巧(纯属爱好,不定期更新)

    目录 1 鼠标所到之处的 net 高亮显示 2 导出PCB所有图层的快捷键 3 同一个工程中不同的原理图导入到不同的PCB中 4 设置元件旋转步进角为45 5 添加LOGO的方法 6 删除已经放置的 LOGO 的方法 7 一些快捷键 1 鼠
  • C++中vector的size()类型

    span class token keyword int span span class token function main span span class token punctuation span span class token
  • 【论文笔记】FashionBERT: Text and Image Matching with Adaptive Loss for Cross-modal Retrieval

    文章来源 xff1a SIGIR 20 摘要 文章基于BERT提出了一个跨模态检索模型 xff0c 该模型并不是一个通用的检索模型 xff0c 主要用于电商领域时尚用品 xff08 Fashon xff09 检索 xff0c 作者是阿里巴巴
  • 多模态数据集预处理方法

    摘要 对文本是单个词语的一般采用词袋特征 图片可以采用多种灵活的处理方式 对文本是句子甚至是段落的则需要采用较为复杂的处理方式 xff0c 参考文献 1 2 中对Wiki和Pascal Sentence数据集的处理方式 Wiki 参考文献
  • Numpy删除指定行

    删除Numpy数组中指定的某些行 函数 xff1a np delete span class token comment 示例 span span class token keyword import span numpy span cla
  • Pytorch排查训练过程中出现nan值的位置

    span class token keyword import span torch span class token comment 正向传播 span torch span class token punctuation span au
  • JupyterLab配置远程访问

    新版本的jupyter lab似乎和之前版本的不大一样 目录 生成配置文件设置密码安装插件将 96 Test 96 环境写入jupyterlab设置远程访问其他 生成配置文件 jupyter lab generate config 设置密码
  • Anaconda多用户配置指北

    适用于实验室深度学习服务器配置 创建用户组 groupadd stu配置conda xff0c 参考这里新创建的用户加入stu组 xff0c 并指定家目录useradd d home media m g stu xpt xff0c 为不同用
  • Hexo/Github.io 配置腾讯云CDN

    前言 使用Github io搭建自己的博客时可能会遇到访问速度不理想的情况 xff0c 可以采用如下几种方案解决 xff1a 将Hexo部署到阿里云 xff08 点击查看 xff09 xff0c 直接访问阿里云 xff0c 但这种方式会暴露
  • slam定位学习笔记(七)-g2o学习

    主要学习的是这篇文章 xff0c 但大佬并没有在文章里面仔细的讲g2o xff0c 所以我在网上找了这几篇介绍g2o的文章 xff0c 讲的十分详细 xff0c 对入门十分友好 xff1a 文章一 文章二 文章三 xff0c 这三篇都是一个
  • XTDorne平台搭建无人机仿真环境时遇到的问题及解决

    XTDorne平台搭建无人机仿真环境时遇到的问题及解决 PX4安装过程中遇到的问题及解决 PX4安装过程中遇到的问题及解决 执行make px4 sitl default gazebo遇到的问题 问题1 xff1a No package 3
  • 使用Adobe软件镜像pdf页面

    直接上图 xff1a 之后确定保存路径就OK
  • docker安装指定版本(替换安装)

    1 docker安装 如果本地之前安装过docker版本 xff0c 需要先卸载 yum y remove docker docker client docker client latest docker common docker lat
  • 虚拟机下CentOS8 无法上网的问题解决办法

    1 首先切换成管理员身份 xff0c root是我之前设置的管理员账号 xff0c 可能会有不同 su root 之后输入密码即可 2 然后进入目录修改配置信息 cd etc sysconfig network scripts 使用ll命令
  • Python+pycharm安装dlib库

    目录 下载dilb库方法一 xff1a 使用pip安装dlib库方法二 xff1a 使用pycharm进行安装导入dlib库成功 下载dilb库 写在前面 xff1a 尽量要用对应Python版本的库 已经安装好Python3 6 1和py
  • C++ 指向 Void 的指针

    C 43 43 指向 Void 的指针 在 C 43 43 中 xff0c 不能将一种数据类型的变量地址赋值给另一种数据类型的指针 指针是int类型 int ptr 变量为双精度类型 double d 61 9 0 错误 无法将 doubl