关于C++ 输出函数cout 与 printf 的区别

我知道在C++中cout 和printf 都能用于输出,但是他俩肯定在输出的方式、细节上有差别的。
我想问 指针,char* p=“abcd” 按我的理解p就是存储地址的变量,输出p就应该是输出存储“abcd”的空间首地址。
用printf则输出的是存储“abcd”的空间首地址(这和我预想的一样),用cout输出p则整个字符数组都输出了,这是为什么?他们两个的输出方式到底有什么差别。以至于输出同一个变量会得到不同的结果?
比如:
#include<iostream>
#include<stdio.h>
using namespace std;
int main () {
char* p="abcd";
cout<<p<<" "<<*p;//这里p输出的是abcd完整的字符串,而*p则输出的是第一个字符a。
printf("%x %c",p,*p);//这里p则输出的是存储“abcd”的空间首地址,*p则输出第一个字符a。
return 0;
}

先回答两者的异同
1.两者都有自己的缓冲区
2.如果用printf,需要#include <stdio.h>;
如果用cout<<,需要#include <iostream.h>,功能一样;
不过printf更严谨一些,比如它会限制输 出类型。
3. cout慢些,安全措施多些,和其它的STL库的合作性也比较好
功能方面,作为标准IO,二者没什么差别,基本你能做的我也能做,而且难度相近
一个是类函数,一个普通c语言函数。
ps:最好不要混用两者,那时printf函数调用会将输出立刻显示在屏幕上,cout不会立刻显示在屏幕上,cout在输出回车或者显示调用cout.flush();或者其他也些情况才刷新缓冲区

cout<<p; 这个是输出p指向的内存地址保存的字符流。。。(如果对流的概念不是很了解的话,就先搜索下c++流 吧)
printf("%x", p); 这个是输出p作为指针变量的值,而p保存的是“abcd”这个字符串在内存中的首地址,你定义的%x输出为十六进制。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-29
你说的这个跟cout,printf无关 输出不同是因为你printf的格式不正确,
应该为printf("%s %c",p,*p)
cout<<p默认帮你进行了格式化,即是%s“”本回答被提问者采纳
第2个回答  推荐于2017-09-08
c中的printf和c++中的cout完成的功能一样,都是输出,书写格式不一样。区别:
1、格式不同int a=6; cout<<a<<endl; printf("%d\n",a);
2、printf需要你告诉它格式(int %d, double %f,char %c)cout不需要。
3、printf是函数。cout是ostream对象,和<<配合使用。
4、printf是变参函数,没有类型检查,不安全。cout是通过运算符重载实现的,安全。
5、如果printf碰到不认识的类型就没办法了,而cout可以自己重载进行扩展。
6、有时候printf比cout灵活。
c++中能使用printf,但是c中不能使用cout,也可以这么说:c++可以完全兼容c的用法,反过来就不行。
相似回答