利用gets函数 花式进行赋值操作

版权声明:欢迎转载,不要求署名~~~ https://blog.csdn.net/shadandeajian/article/details/81989021

今天在看别人代码时,发现gets的新用法,记录如下

需求:

给三个字符串数组,两个一维数组char a[],char b[],一个二维字符串数组temp[][]
要求输入两个字符串,分别输入到ab中,然后让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差不多。
赋值语句写到数组初始化内,代码可读性将大大变差。

猜你喜欢

转载自blog.csdn.net/shadandeajian/article/details/81989021