c++输出char型变量与字符串的地址

在c里面如果指针是一个基本数值型

int ,foalt ,long等,如果输出里有

cout << ptr << endl;

其中ptr是指针的名,则输出的值是指针的地址,

如果是char * (char指针) 则输出的是char指针的值。

在C++中,熟悉int和char型的变量是最基本不过的了,不过,我想,很多初学者会跟我一样,搞不懂如何输出一个char变量的地址?就举下面一个例子:

int i=97;

char c=‘a‘;

cout<<"line 1: i="<<i<<"\t\t"<<"c="<<c;

cout<<"\nline 2: &i="<<&i<<"\t"<<"&c="<<&c;

我想,对于line
1的输出结果是没有任何疑问的,而且,我想对于初学指针的朋友来说,你可能也会跟我一样,毫不犹豫的认为输出的会是两个地址,可是,你只答对了一半!

的确,line
2中的&i输出的是int变量i的地址,可是,当你看到运行结果的时候,你是不是应该会很惊讶:为什么&c输出的却是一个乱码?

首先,我想先介绍一下在C++中字符串的基础知识。

在C++中,字符串是以空终止符(‘\0‘)结尾的字符数组,通过字符串中第一个字符的指针访问字符串。也就是说,字符串的值是字符串中第一个字符的(常量)地址。如下的面3种形式表示:

char *str="string";

char str2[]="string2";

char str3[]={‘s‘,‘t‘,‘r‘,‘i‘,‘n‘,‘g‘,‘3‘,‘\0‘};

cout<<"line 3: str="<<str<<endl;

cout<<"line 4: str2="<<str2<<endl;

cout<<"line 5: str3="<<str3<<endl;

运行可知,这3行的输出就是保存的字符串的值,而并非我们认为的地址。那么,我们可以联系到前面&c,其实这就是一个char
*的变量,所以,输出的自然就应该是字符串的值。可是,&c保存的字符串是没有终止符的,因此输出的也就是乱码了。

最近,在读到《C++程序设计教程》(第4版)第12章的时候,我才解决了这个疑惑。实际上,任何程序员希望输出为地址的指针变量都要作一个转换,即强制char
*转换成void *,那么,char型变量和字符串的地址就可以以十六机制的格式输出了,如下所示:

cout<<"line 6: static_cast<void *>(&c)="<<static_cast<void *>(&c)<<endl;

cout<<"line 7: static_cast<void *>(str)="<<static_cast<void *>(str)<<endl;

cout<< (int
*)str<<endl;也可以

此时,可以看到输出的结果就是char类型变量和字符串变量的地址了。

时间: 2024-08-18 17:13:21

c++输出char型变量与字符串的地址的相关文章

C语言中以十六进制输出字符型变量会出现&#39;ffffff&quot;的问题

最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下: C代码   char buf[10] = {0}; buf[0] = 0xbf; printf("%2x\n\n\n", buf[0]);            /*在终端将会显示成:ffffffbf*/ buf[1] = 0x7f; printf("%2x\n\n\n", bu

java 常见的几种类型范围说明,char 型变量中能不能存贮一个中文汉字

package com.yuan.test; public class Autogrew { public static void main(String[] args) {  // 保存 short 可取的最大值的常量,最大值为 215-1.(32 767)   // 保存 short 可取的最小值的常量,最小值为 -215.(-32 768)      short s1=11278;      s1+=1;      //s1=s1+1;//报错 自动会转换成int 类型      Syst

char型变量中能存贮一个中文汉字

char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦.不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字.补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节. 备注:后面一部分回答虽然不是在正面回答题目,但是,为了展现自己的学识和表现自己对问题理解的透彻深入,可以回答一些相关的知识,做到知无不言,言无不尽.

关于C++中char 型变量的地址输出

在刚开始学习C/C++过程中,我们希望输出各个变量的地址来窥探一些我们"百思不得其解"的现象,例如搞清函数堆栈相关的程序内部秘密. 先看下面示例: #include<stdio.h> #include<iostream> using namespace std; class TestArrange { public: long m_lng; char m_ch1; TestArrange() { m_lng = 0; m_ch1 = 'a'; m_int = 0

char型变量中能不能存贮一个中文汉字

在C语言中,char类型占1一个字节,而汉子占2个字节,所以不能存储. 在Java中,char类型占2个字节,而且Java默认采用Unicode编码,以个Unicode码是16位,所以一个Unicode码占两个字节,Java中无论汉子还是英文字母都是用Unicode编码来表示的.所以,在Java中,char类型变量可以存储一个中文汉字.

char型变量中能不能存储一个中文汉字,为什么?

在C语言中,char类型占1一个字节,而汉子占2个字节,所以不能存储. 在Java中,char类型占2个字节,而且Java默认采用Unicode编码,一个Unicode码是16位,所以一个Unicode码占两个字节,Java中无论汉子还是英文字母都是用Unicode编码来表示的.所以,在Java中,char类型变量可以存储一个中文汉字. 原文地址:https://www.cnblogs.com/arvins/p/8504429.html

好玩的加密与解密及char型数组与字符串的相互转化

char型变量包含了常用的字符,数字,符号,故可将文件,网址等进行加密,方式是进行异或运算,解密时与同一值进行异或运算即可解密. ========================>小应用 在这里用到字符数组char[]与字符串String的相互转换 字符数组char[]转换成String:String s = new String(charArray); String转换成字符数组char[]:char[] charArray = "abc".toCharArray(); 解密也

C语言:int型指针与char型指针本质

---恢复内容开始--- 我的理解是,不管定义时将指针定义成何种类型,指针本质上都是一个数字,其位数由编译器来决定. 比如我的编译器是32位,那么无论是定义一个char *pc还是定义一个int *pi,本质上pc与pi都是一个32位的数,但是由于"char *" 和 "int *"的限制,所以pc++是自加8bit,而pi++是自加16bit. 1 // int指针与char指针.cpp : 2 // 看看“char型指针”与“int型指针”本质上有什么区别 3

变量与字符串的连接 - format、格式化字符串

变量与字符串的连接 先当以如下三个变量: name = 'wwb' age = '17' job = 'study' 方法一:利用+号进行连接 >>> info1 = '''Welcome to ''' + name +''''s code kingdom ... Name:''' + name +''' ... Age:''' + age +''' ... Job:''' + job >>> print(info1) Welcome to wwb's code kin