两分钟学会C++

题记

两分钟能学会C++吗!?
请先阅读下面的文章,再决定你要不要当程序员,或者学习C++!
https://blog.csdn.net/EGEFCXzo3Ha1x4/article/details/80105102

一章

在函数里static一个变量的效果

在一个类的函数中定义一个变量,累加它。

void paddyfield::StaticValueTest()
{
    static int i= 0;
    i++;
    cout << i << endl;
    sleep(1);
}

在主函数中,反复调用这个函数,会怎样?

int main()
{
    paddyfield pad;
    pad = paddyfield();
    for (int i = 0; i < 100; i ++) {
        pad.StaticValueTest();
    }
}

结果:

Finished building target: paddyfield

1
2
3
4
5
6

解释:

局部静态变量:
  在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。
  内存中的位置:静态存储区
  初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);
  作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对它进行访问,直到该函数再次被调用,并且值不变;

参考文档:

https://www.cnblogs.com/jhmu0613/p/7131997.html

二章

关于snprintf这样函数的一些了解

1、这类函数复制的字符个数一般是你输入空间大小-1

vsnprintf(src_char, 1024, format, args);

这时只会复制1023个字符。自动保证以‘\0’结尾
2、这里的函数机理都会涉及vsnprintf这个函数,其中有牵连到可变参数的传递。
函数应用:

void straddstr(string &src, const char *format, ...)
{
    va_list args;
    va_start(args, format);
    char src_char[1024] = {0};
    vsnprintf(src_char, sizeof(src_char), format, args);
    src += src_char;
    va_end(args);
}

这是一个标准的可变参数的传递与应用。其中关键的是

va_list
va_start
va_end

这类va系列的方式,是最常见的可变参数传递。
::这里值得注意的是这些基本都是宏定义的,你也不能直接对它们进行逐个调用,除非你使用va_arg这个函数,但是这个函数又要求你向它说明可变参数的类型,所以你想实现类似于snprintf的函数,还是直接调用vsnprintf这样现成的函数比较好。
宏应用:

#define OSYSRT(RET, SIZE, format, ...) do {\
        int _O_RET = OSystem(SIZE, format, ##__VA_ARGS__);\
        if (_O_RET<0 || _O_RET==127)\
        { return RET;}\
    } while(0)

在宏里面的应用可以直接参考上面代码。

参考文档:

https://www.cnblogs.com/yongssu/p/4677556.html

三章

关于std::find函数

在普通的list容器里面,要查找某个元素,比较麻烦,这是我们用std::find函数来,就能减低代码量。

#include <algorithm>
    list<string>::iterator itd;
    itd = std::find(lstr.begin(), lstr.end(),"wen");
    if (itd != lstr.end()) {
        cout << "yes" << endl;
    } else {
        cout << "no" << endl;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值