c++中的printf、和cout和cin后面跟指针的问题
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后面跟指针的问题的更多相关文章
- 两种方法:VS2008下C++窗体程序显示控制台的方法——在QT程序中使用cout和cin
老蔡写了一个基于QT的窗体程序,而过去写的类的调试信息都是用cout显示的,苦于窗体程序无法显示cout信息很多信息都看不到,于是就想到让控制台和窗体同时显示.显示控制台方法如下 1.项目(或者叫“工 ...
- c++ cout、cin、endl
cout是标准输出流对象,<<是输出操作符:cin是标准输入流对象,>>是输入操作符:endl是换行符操作符.他们都属于C++标准库,所以都在std的名字空间里.所以要在开头写 ...
- shell中awk printf的用法
打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表符并不能保证得到想要的输出,因此,可以用printf函数来格式化特别的输出. printf函数返回一个带格式的字符串给 ...
- Linux内核中的printf实现【转】
转自:http://www.cnblogs.com/chenglei/archive/2009/08/06/1540702.html 从main.c中的printf开始读这个函数. 首先看printf ...
- 转载:shell中awk printf的用法
转载:http://www.linuxawk.com/jiaocheng/83.html 6. printf函数 打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表 ...
- c++中的对象引用(object reference)与对象指针的区别
★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需 ...
- C++中怎么获取类的成员函数的函数指针?
用一个实际代码来说明. class A { public: staticvoid staticmember(){cout<<"static"<<endl;} ...
- C++中vector::data()使用心得和对自定义类型指针运算符的默认重载
一.C++ vector::data()函数 返回值类型:vector的基类 返回值:Returns a pointer such that [data(), data() + size()] is ...
- fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s",name); buff为字符数组
fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s" ...
随机推荐
- 60天shell脚本计划-8/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月3日 --修改时间:2021年3月7日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...
- 60天shell脚本计划-2/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月1日 --修改时间:2021年2月5日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...
- input框限制输入金额
HTML: <input type="tel" class="capital mui-input-clear" value="0.00" ...
- Chrome:查看HTTP请求的header信息
1.打开Google浏览器Chrome,通过F12进入开发者工具,进入Network模块下,此时由于我们还没有进行任何HTTP请求,所以这个页面下还是空空如也 2.随便通过某个搜索引擎搜索一下,比如通 ...
- jq获取不包含某些属性的元素
最近写项目,有个功能实现checkbox全选,但是被禁用的checkbox不能选中 点击全选后发现禁用checkbox的也被选中了,不符合需求. 但是想了半天,属性选择器都是判断某个属性值的,没有判断 ...
- Tableau怎么制作专业图表
Tableau怎么制作专业图表 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一. 统计表 1.1 不同种类的图表风格 商业周刊的图表风格 经济学人的图表风格 华尔 ...
- Linux 磁盘inode字节数占满的问题
查看ext系列文件系统的信息 #dumpe2fs /dev/sdc1 Inode count: 65536 inode号数量 Block count: 262144 块数量 Reserved bloc ...
- ElasticSearch 文档(document)内部机制详解
1.数据路由 1.1 文档存储怎么路由到相应分片? 一个文档,最终会落在主分片的一个分片上,到底应该在哪一个分片?这就是数据路由. 1.2 路由算法 shard = hash(routing) % n ...
- 云e办笔记(删减)
1JwtTokenUtils工具 2公共返回对象 3Admin实现UserDetails 4AdminLoginParam 5AdminLoginController 6SecurityConfig ...
- H3C三层交换机之IRF虚拟化技术详解及配置
一.IRF是什么? 目前,网络中主要存在两种结构的通信设备,固定盒式设备和模块框式分布式设备. 固定盒式设备成本低廉,但没有高可用性支持:模块框式分布式设备具有高可用性.高性能.高端口密度的优点,但投 ...