c语言问题!!!!!!!!
你学习c,问这个问题暂时有点超纲了。你对c++有一定了解才行。你需要理解对象,重载等知识点。
为了方便你理解,一切都从简。首先你可以理解,printf是c的输出方法,cout是c++的输出方法。当然因为c++沿用了c的标准输入输出,所以c++也可以用printf。
现在简单说下几个概念,首先是对象,这个我还真不知道该怎么给你解释,你真想弄明白,就需要自己去看c++的面向对象概念。暂时你可以把他看成一个升级版的集合吧。集合里面可以有属性,也可以有函数方法。
重载,c语言中是在同一个文件中,是不允许相同名字的函数出现的。c++可以。函数名可以一样,只要参数不同就行。在调用这类相同名字的函数时,编译器会自动根据你传入的参数类型,选择相应的方法进行运行。
printf是一个函数。原型如下
int printf(const char *format, ...);
你可以看到,他的参数除了第一个是char型确认的,其后的参数,不管是数量,还是类型都没确认。这里就会出现一个问题。因为后面的参数类型不确定,而编译器又不会自动去识别,所以在输出的时候就很容易出错
#include<stdio.h>
int main(){
int a=5;
float x = a;
printf("%d\n",a);
printf("%f\n",a); //会输出5.000000吗?
printf("%f\n",x);
printf("%d\n",x);
printf("%f,%f\n",a,x);
printf("%f,%f\n",x,a);
printf("%d,%f\n",a,x);
return 0;
}
你可以去试试这段代码,亲自试过你才能理解。就因为这个原因,所以我们说printf是不安全的。
6、c++中就不会出现这种情况,因为函数的参数类型一开始就是固定的。因为重载的关系。在实际调用中,是根据参数的类型选择合适的函数方法进行调用。所以就不会出现这种问题。
7、前面我说了printf是一个函数。而cout实际是iostream类的一个对象。这里我就不深入说明了。你有个概念就行。