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

本文介绍了在查看他人代码时发现的一种使用gets函数的非典型方式,通过示例展示了如何在全局范围内进行赋值操作。代码实现了输入两个字符串到一维数组a和b,再将它们存储在二维数组temp中。尽管测试显示输入输出正常,但作者警告这种技巧在实际项目中可能降低代码的可读性和逻辑性,建议谨慎使用。

今天在看别人代码时,发现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差不多。
赋值语句写到数组初始化内,代码可读性将大大变差。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值