版权声明:欢迎转载,不要求署名~~~ https://blog.csdn.net/shadandeajian/article/details/81989021
今天在看别人代码时,发现gets的新用法,记录如下
需求:
给三个字符串数组,两个一维数组char a[],char b[],一个二维字符串数组temp[][]。
要求输入两个字符串,分别输入到a和b中,然后让temp[0]=a,temp[1]=b
代码实现:
一行操作:
#include <iostream>
char a[10], b[10], *temp[] = {gets(a), gets(b)};
int main(void) {
return 0;
}
是不是感到很神奇,竟然在全局范围内进行了赋值操作,而且,gets函数直接写在了数组的声明部分,这是什么鬼?
我们先测试一下这代码行不行:
#include <iostream>
using namespace std;
char a[10], b[10], *temp[] = {gets(a), gets(b)};
int main(void) {
cout << a << endl;
cout << b << endl;
cout << temp[0] << endl;
cout << temp[1] << endl;
int c;
cin >> c;
cout << c << endl;
return 0;
}
Input:
lint1
line2
520
Output:
lint1
line2
line1
line2
520
输入输出正常,520也能正常读入,可见,在全局范围内的读入操作是先进行的,然后才是主函数的赋值操作。
gets函数的返回值:
为什么gets函数能写在数组里,原来,gets函数的返回值是char*,也就是字符串的首地址,所以gets函数在从键盘中获取字符串后,赋值到ab中,然后返回ab字符串的首地址,又赋值到*temp中。
后记:
纯属技巧,实际项目中请谨慎使用,赋值操作写到主函数,代码逻辑性将大大变差,和goto差不多。
赋值语句写到数组初始化内,代码可读性将大大变差。