目录
流插入流提取
我们先浅谈以下c++的输入输出流函数"cout”和“cin”吧
我们在打印“helloworld”的时候会发现" << "的符号,这就是c++的流插入运算符,与之相对的,还有流提取“ >> ” 运算符,注意与c语言的左移和右移运算符区别开来,一个是对数操作,一个是进行IO操作。
区别于c,它们的最大优势就是可以自动识别输入和输出的类型, 但并不意为着它就比printf或者sacnf好用,可以根据自身喜好使用。
cin >> n;//流提取
int* a = (int*)malloc(sizeof(int)*n);
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
cout << a[i]<<" ";//数字之间空行
}
cout << endl;//单行换行
打印学生信息。
int age = 10;
char name[10] = "zhangsan";
cout << "姓名:" << name<<endl << "年龄:" << age << endl;
printf("姓名:%s\n年龄:%d",name,age);
缺省值
缺省分为全缺省和半缺省,二者都遵循传递时必须从右往左连续。缺省值在编程中可以大大简化代码的编写和调用,特别是在具有多个参数的函数中。通过使用缺省值,我们可以让函数在不同的情况下有不同的行为,同时又避免了重复的代码。
全缺省
全缺省指的是函数的所有参数都有默认值,也就是说所有参数都可以不给定值,而直接使用函数的默认值
void fun(int i = 0, int x = 10, double w= 2.3)
{
cout << "i=" << i << endl;
cout << "x=" << x << endl;
cout << "w=" << w << endl;
}
int main()
{
fun(2, 3, 1);
fun(2, 1);
fun(1);
半缺省
半缺省就是不完全给函数给初值,而是选择性地给。
以下几种方式都是错误的,可以理解为栈先进后出
void fun(int i = 0, int x, double w = 2.3)
fun(,2,);
fun(, , 3);
这里给大家介绍一个缺省具体应用的场景,大家自行体会。
struct Stack//栈
{
int* a;
int top;
int capacity;
};
void StackInit(struct Stack* ps, int defaultcapicity = 4)
{
ps->a = (int*)malloc(sizeof(int) * defaultcapicity);
if (ps->a == NULL)
{
perror("malloc fail");
exit(-1);
}
ps->top = 0;
ps->capacity = defaultcapicity;
}
int main()
{
struct Stack a;
StackInit(&a);//不传则使用默认空间
StackInit(&a, 100); //假设要求初始分配空间100
可以看出缺省使得我们对参数的把控更加自由多样,也能根据具体要求传递所需的缺省值。
还有一个注意的点是当函数声明和定义分开的时候
1.只能在声明时设置缺省值。2.不能在定义函数时给。3.不能声明和定义同时给。
为什么呢,因为包含头文件的时候你只包含了声明的部分,而你却在定义函数时给缺省,这样可能会出错。然后如果同时给,如果给的不一致也可能会出问题。
缺省值只能是常量或者全局变量,一般我们直接在函数声明时给缺省,所以只需考虑常量这点即可,注意,这里的常量指的不是形参是常量,而是形参的值是常量。