printf里面打印指针的问题

而在c语言中,使用printf只需要使用不同的格式就可以区分打印出是字符串还是指针变量的值:

cout和cin后面跟指针的问题

cout<<mm 和cin>>nn;它是可以自己识别mm和nn是不是指针变量吗?
    答:cin后面只能跟char*的指针,别的类型指针(eg:int*)报错; (这里只是说cin后面跟的指针类型的限制,不涉及其它类型)
           cout后面跟char*的指针,打印的是里面的内容,cout后面跟int*的指针,打印的是地址;
           cin输入时,如果给char* 会自动结束符吗,会的;
           char *p2;前提是p2指向有空间的地址
      cin >> * p2 ;  //只是输入一个字符
      cin >> p2 ;   //输入p2所指的空间内容 全部修改

在C语言里,输出一个字符串的指针很方便,直接printf("%p/n",p);就输出了。
    而 C++ 里 cout 太自作聪明了,为了省去我们循环输出字符的麻烦, cout<<p<<endl; 被翻译为输出 p 指向的字符串值。
    这个时候要输出 p 的指针值就只能先将其转为 void * 再输出。因为 void 型, cout 没法输出,只能乖乖输出指针。
    此外 cout<<&p<<endl; 是不可取的,它其实等效于 printf("%p/n",&p);
    那个输出流运算符被重载过,这样更加方便输出字符串,因为字符串比较特殊,用/0结尾,
    所以这样的重载可行,输出到内存为 /0 的地方就可以,但是普通数组没有这样的特性所以不重载,直接输出地址

举例说明

我们知道在c++中指针变量和指针所指向的内存是两个完全不同的概念,指针变量里边存放的是一个地址,那么我们怎么输出指针变量的值,以及怎么输入指针变量本身的地址呢?

char *p="abcde";
cout << hex << &p <<endl;//此处是输入指针变量的地址
cout << hex << (void *)p<<endl;//此处是输出指针变量的值 即指针所指向内存的地址

(void *)强制类型转换
因此,同样的,对于怎么访问类对象中指针变量的值和类对象中指针变量的地址:

class name
{
public:
name(char *pn); ~name();
//protected:
char *pname; int size;
}; name::name(char *pn)
{
cout << " Constructing " << pn << endl;
pname = new char[strlen(pn) + 1];
if (pname != 0) strcpy(pname, pn);
size = strlen(pn);
} void main()
{
name Obj1("NoName");
cout << hex << "obj1的地址是:" << &Obj1.pname << endl;//此处是输出指针变量的地址
cout << hex << "obj2的地址是:" << (void *)Obj1.pname << endl;//此处是输出指针变量的值
}

c++中的printf、和cout和cin后面跟指针的问题的更多相关文章

  1. 两种方法:VS2008下C++窗体程序显示控制台的方法——在QT程序中使用cout和cin

    老蔡写了一个基于QT的窗体程序,而过去写的类的调试信息都是用cout显示的,苦于窗体程序无法显示cout信息很多信息都看不到,于是就想到让控制台和窗体同时显示.显示控制台方法如下 1.项目(或者叫“工 ...

  2. c++ cout、cin、endl

    cout是标准输出流对象,<<是输出操作符:cin是标准输入流对象,>>是输入操作符:endl是换行符操作符.他们都属于C++标准库,所以都在std的名字空间里.所以要在开头写 ...

  3. shell中awk printf的用法

    打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表符并不能保证得到想要的输出,因此,可以用printf函数来格式化特别的输出. printf函数返回一个带格式的字符串给 ...

  4. Linux内核中的printf实现【转】

    转自:http://www.cnblogs.com/chenglei/archive/2009/08/06/1540702.html 从main.c中的printf开始读这个函数. 首先看printf ...

  5. 转载:shell中awk printf的用法

    转载:http://www.linuxawk.com/jiaocheng/83.html 6. printf函数   打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表 ...

  6. c++中的对象引用(object reference)与对象指针的区别

    ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需 ...

  7. C++中怎么获取类的成员函数的函数指针?

    用一个实际代码来说明. class A { public: staticvoid staticmember(){cout<<"static"<<endl;} ...

  8. C++中vector::data()使用心得和对自定义类型指针运算符的默认重载

    一.C++ vector::data()函数 返回值类型:vector的基类 返回值:Returns a pointer such that [data(), data() + size()] is ...

  9. fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s",name); buff为字符数组

    fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s" ...

随机推荐

  1. easyui datagrid中 formatter的用法

    1.基本用法 单元格formatter(格式化器)函数,带3个参数: value:字段值. row:行记录数据. index: 行索引. $('#dg').datagrid({ columns:[[ ...

  2. [GYCTF2020]Ezsqli 无列名注入

    手工注入了几下,是数字注入,过滤了 or , union 输入1||1=1   回显Nu1L 再输入 1&&(ascii(substr(database(),1,1))>32)# ...

  3. 2016EC Final F.Mr. Panda and Fantastic Beasts

    题目大意 \(T(1\leq T\leq42)\)组数据,给定\(n(2\leq n\leq 50000)\)个字符串\(S_{i}(n\leq\sum_{i=1}^{n}S_{i}\leq 2500 ...

  4. django-admin常用总结

    django-admin常用总结 1.modelAdmin 1.1 list_display:显示列表. 1.2 search_fields:可被搜索的字段. 1.3 list_per_page:显示 ...

  5. 07-Spring整合Mybatis

    Spring之整合Mybatis 整合核心思路 由很多框架都需要和Spring进行整合,而整合的核心思想就是把其他框架所产生的对象放到Spring容器中,让其成为Bean. 比如Mybatis,Myb ...

  6. 前端工程化:使用 shelljs 生成 yapi 接口文件

    之前的文章介绍了使用 yapi-to-typescript (下文简称 ytt)生成接口类型定义文件,方便我们直接使用接口的请求和响应类型,能减少很多写接口类型的时间. 使用 yapi-to-type ...

  7. ESXI 虚拟化误删除管理端口Management Network (vmk0),导致无法访问后台解决方案

    按F2开启控制台shell,启用后返回.按Alt+F1打开终端. 输入 esxcfg-vmknic -a -i 192.168.1.10 -n 255.255.255.0 "Manageme ...

  8. 2022年官网下安装MySQL最全版与官网查阅方法

    目录 安装部署MySQL 一.百度查找MySQL官网 二.如图找到DOWNLOADS位置,既是下载位置 三.双击进入DOWNLOADS,下拉找到如图位置(红圈位置是社区免费版,上边部分应该是收费版) ...

  9. 导入导出笔记-easyExcel初探(表格导入和模板化导出)

    前言 本文使用的EasyExcel Alibaba和EasyPoi Apache技术栈分析 EasyExcel Dependency EasyPoi Dependency 1.需求一:表格化需求导入导 ...

  10. python 命令运行环境下 ModuleNotFoundError: No module named 'Test'

    解决方法有两种 1. 第一种设置环境变量法 on windows the line is : SET PYTHONPATH=%cd%;%cd%\Test NOT SET PYTHONPATH=%cd% ...