Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么字符类型变量的打印引用返回其中的值?

为什么字符类型变量的打印引用返回其中的值?
EN

Stack Overflow用户
提问于 2021-01-03 00:44:24
回答 2查看 131关注 0票数 1

代码片段:

代码语言:javascript
运行
AI代码解释
复制
#include <iostream>

int main()
{
    char c = 50;
    int i = 50;

    std::cout<<&c<<"\n";
    std::cout<<*(&c)<<"\n";
    std::cout<<&i<<"\n";

    return 0;
}

预期产出:

代码语言:javascript
运行
AI代码解释
复制
<memory_address>
2
<memory_address>

原始产出:

代码语言:javascript
运行
AI代码解释
复制
2
2
0x7ffee0504ac4

混淆:

我认为在这种情况下,&应该返回变量的引用,打印它应该给我一个内存地址,这对于其他数据类型的变量,比如intfloatdouble,都是正确的。

那么,为什么在char类型的情况下,它会显示其中的值?

编译器= clang-1103.0.32.62

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-03 00:49:54

这是因为of的operator<< (const char*)过载。

&c的类型为char*operator<<试图打印0结尾的C-字符串.如果您将空*转换为(void *)(&c),那么您将得到预期的内存地址:

代码语言:javascript
运行
AI代码解释
复制
#include <iostream>

int main()
{
    char c = 50;
    int i = 50;

    std::cout<<&c<<"\n";   // this will try to print null-terminated char* string.
    std::cout << (void*)(&c) << "\n"; // this will print memory address as expected
    std::cout<<*(&c)<<"\n";
    std::cout<<&i<<"\n";

    return 0;
}

注意:cout << &c可能会打印更多的字符,这取决于内存地址&c后面的字节(0字节可能远远落后)。这基本上是未定义的行为(UB)。

票数 5
EN

Stack Overflow用户

发布于 2021-01-03 00:52:19

代码中没有引用。&是address-of操作符,它返回指针而不是引用。&仅在声明中使用引用,而不是在表达式中使用引用。

&c&i得到不同结果的原因是operator<<char*有重载,假定参数是C字符串。因为这不是你的情况,你的程序实际上有未定义的行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65548016

复制
相关文章
vs安装本地nuget包(vs2015离线使用)
今天想在项目中使用RestSharp,不过在nuget控制台中发现要么新版本不支持.net4.0,要么用老版本的下载不下来,最后没办法,在RestSharp网站上下载了离线安装包,怎样安装呢?方法之一,概括而言就是把安装包放在NuGet下载缓存目录下,下面就来打开目录:
全栈程序员站长
2022/07/28
3.1K0
vs安装本地nuget包(vs2015离线使用)
安装Nuget包
项目中添加包:dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
CN_Simo
2022/05/10
1K0
安装Nuget包
Visual Studio 2015 的安装和使用
VS2015 是现在微软公司最新也是最强大的IDE,可以开发C#、C++、VB、Android、iOS等多种语言和平台的应用程序。而且,对应的免费版本VS2015 社区版 也出来了。如果只是为了初学或者是想尝试一下VS的同学,可以下载VS2015社区版来试用一下。
乐百川
2022/05/05
2K0
visual studio 2015安装问题及解决
运行C++程序时提示错误:“计算机中丢失MSVCP140D.dll,尝试重新安装该程序以解决此问题”
用户1396155
2018/08/02
7940
如果没有Visual Studio 2015,我们如何创建.NET Core项目 ?
对于.NET开发人员来说,我们已经习惯了VS这个世界上最强大的IDE,所以对他们来说,项目的创建直接利用安装到VS中相应的项目模板即可。当.NET Core跨出了Windows的围栏,正式拥抱其他平台,意味着VS已经不再是唯一的IDE。于此同时,.NET Core充分借鉴了目前非常流行的基于“脚手架(Scaffolding)”的源文件生成方式,在它的核心命令行“dotnet”也添加了脚手架的命令行开关。除此之外,.NET Core真正对社区敞开胸怀,我们可以直接利用现有的脚手架工具Yeoman来生成.NET
蒋金楠
2018/01/15
1.1K0
如果没有Visual Studio 2015,我们如何创建.NET Core项目 ?
Visual Studio 2015软件下载和安装教程
Microsoft Visual Studio 2015(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。
肉肉软件安装
2022/12/10
2.9K0
Visual Studio 2015软件下载和安装教程
Visual Studio Installer打包安装项目VS2015
使用VS2015的Visual Studio Installer打包安装项目,虽然整体操作很简单,但还是有几个特殊的点需要记一下,故写下此博客方便以后查阅
vv彭
2020/12/21
1.7K0
Visual Studio Installer打包安装项目VS2015
NuGet 修改包路径
通过 NuGet 安装包时,NuGet 先将包下载至一个统一的目录,默认路径是:C:\Users\用户名\.nuget\packages
丹枫无迹
2019/11/20
2.2K0
windows有没有内网nuget源
解决国内访问NuGet服务器速度不稳定的问题 ,这里推荐使用NuGet微软官方中国国内镜像
Windows技术交流
2021/12/30
2.1K0
Visual Studio 2015正式发布
Windows 10 RTM正式版要7月29日发布,微软的另一个重磅软件Visual Studio 2015已经率先发布,今天如期放出了正式版本。Visual Studio 2015包括许多新功能和更新,如通用Windows应用开发工具、面向iOS、Android、Windows的跨平台移动开发工具(包括Xamarin、Apache Cordova、Unity)、可移植C++库、适用于Android的本机活动C++模板等等,对Cordova,Xamarin , C++的跨平台支持都非常好。让你通过一个工具完
张善友
2018/01/19
1.9K0
Visual Studio 2015正式发布
Windows 7 上安装Visual Studio 2015 失败解决方案
安装之前先要看看自己的系统支不支持,具体的可以看:https://www.visualstudio.com/en-us/visual-studio-2015-system-requirements-vs.aspx,直接到 微软官方网站进行下载:https://www.visualstudio.com/downloads/download-visual-studio-vs,也可以看Visual Studio 2015正式发布 中列出的下载地址直接下载,整个的安装过程和Visual Studio 2012,Vi
张善友
2018/01/19
2.1K0
Windows 7 上安装Visual Studio 2015 失败解决方案
VS2015 Visual Assist X 破解版安装教程
安装包下载方法:公众号【视觉IMAX】后台回复「VA助手」,即可得到安装包下载链接。
3D视觉工坊
2020/12/11
2.5K0
VS2015 Visual Assist X 破解版安装教程
使用 Microsoft.Net.Compilers 在旧版本的 Visual Studio 2013/2015/2017 中开启新的 C# 7.x 和 C# 8 语法
新版本的 C# 特性需要新版本的 Visual Studio 的支持。不过,如果你不介意修改项目的话,你也能在低版本的 Visual Studio 中获得高版本的 C# 语言支持了。
walterlv
2023/10/22
5110
Visual Studio 2013 下 NuGet 无法识别自定义包路径的解决方法
升级到 VS2013 之后, 编译时会发现 VS2013 下 NuGet 不能正确识别预先配置好的存放目录, 总是把文件放在解决方案的 packages 目录下, 这个可以说是 NuGet 的 bug , 也可以说是 VS2013 的 bug , 原因是:
beginor
2020/08/10
1.9K0
修改Nuget包默认存放路径
默认情况下所有的Nuget包都会下载到C盘,目前我这边有几十个G的大小,这导致我C盘的容量越来越小…
HueiFeng
2020/06/05
2.9K0
visual studio 2015 warning MSB3246
在我们很高兴的按下 本地计算机运行 按钮,希望看到我们程序运行的时候,垃圾vs就告诉我们,你的程序出现了问题,问题就是: warning MSB3246: 解析的文件包含错误图像、无元数据或不可访问。未能加载文件或程序集“*.dll”或它的某一个依赖项。试图加载格式不正确的程序。 其中*.dll就是一个dll名称,那么遇到这个问题,不是修复vs就能做好的,我找了好久,在堆栈炸了找到一个可以用的方法
林德熙
2022/08/04
4010
阻止某个 NuGet 包意外升级
2018-06-29 09:59
walterlv
2018/09/18
1.4K0
阻止某个 NuGet 包意外升级
visual studio 2015 warning MSB3246
在我们很高兴的按下 本地计算机运行 按钮,希望看到我们程序运行的时候,垃圾vs就告诉我们,你的程序出现了问题,问题就是: warning MSB3246: 解析的文件包含错误图像、无元数据或不可访问。未能加载文件或程序集“*.dll”或它的某一个依赖项。试图加载格式不正确的程序。 其中*.dll就是一个dll名称,那么遇到这个问题,不是修复vs就能做好的,我找了好久,在堆栈炸了找到一个可以用的方法
林德熙
2018/09/18
8170
【开发环境】Ubuntu 安装 Visual Studio Code 开发环境 ( 下载 Visual Studio Code 安装器 | Ubuntu 安装 deb 包 )
进入 Visual Studio Code 下载页面 https://code.visualstudio.com/ ;
韩曙亮
2023/03/30
1.5K0
【开发环境】Ubuntu 安装 Visual Studio Code 开发环境 ( 下载 Visual Studio Code 安装器 | Ubuntu 安装 deb 包 )
nuget服务器搭建,以及如何发布一个Nuget包
一、本地dll如何打包,以及版本的更新 本小节主要介绍两种方式将本地dll打包为Nuget包, 1.1 利用nuget.exe进行打包(应用于.net framework) 1. 下载nuget.ex
sam dragon
2018/01/17
4.6K0
nuget服务器搭建,以及如何发布一个Nuget包

相似问题

ol.tilegrid.WMTS.WMTSTileGrid不是构造函数

11

导致无法读取未定义的属性

212

默认参数导致无法读取未定义属性?

21

导致:无法读取未定义的属性“product_name”

22

AngularJS - angularAnimate导致错误:无法读取未定义的属性“”

18
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档