C语言学习随笔-07 auto关键字

小青龙 / 2024-01-15 / 原文

1、在C中auto是一个存储类的关键字。

      - auto存储类:auto存储类是所有局部变量默认的存储类。

      - auto可以在声明变量的时候根据变量的初始值的类型自动为此变量选择匹配的类型。

2、注意事项

      - auto声明的变量必须要初始化,否则编译器不能判断变量的类型。

      - auto不能被声明为返回值,auto不能做为形参,auto不能被修饰为模板参数。

3、使用方法

     ①、在C语言中,关键字auto用于声明一个变量为自动变量,自动变量也称为局部变量,所有局部变量默认都是auto,一般省略不写

      ▷ auto声明全局变量时,编译出错,如下:

      例: auto int i;  //全局变量

              void main (void)

              {

              }

       ▷ auto声明局部变量时,编译正常,如下:

       例:void fun(auto int i)

             {

                 auto int j = i;

             }

             void main(voif)

            {

                auto int i = 1;

                fun(i);

            }

      ②、C语言中,只使用auto修饰变量,变量的类型默认为整型

       void main(void)

       {

           double a = 1.2,b = 2.7;

           auto c = a + b;//在C语言中,c=3

       }

      ③、C++中,关键字auto是一个类型说明符

       通过变量的初始值或表达式中的参与运算的的数据类型来推断变量的类型

       void main(void)

       {

          double a = 1.2,b = 2.7;

          auto c = a + b;//c++中,此= 3.9

      }

     例:编写一个程序,读入一个包含标点符号和空格的字符串,将标点符号和空格去除后输出字符串剩余的部分

            #include <iostream>
            #include <string>
            using namespace std;


            int main(void)
            {
                  //src为源字符串,即要操作的字符串,dest为目标字符串,存放操作结果
                    string src, dest;
                    getline(cin,src);//从输入中读取一行赋值给str
                    for (auto c : src)//对str中的每个字符进行循环
                    {
                        if (!ispunct(c) && c != ' ')//判断字符是否为标点符号和空格
                       {
                            dest.push_back(c);//把该字符尾插入到dest中
                       }
                   }
                   cout << dest << endl;//输出dest中的内容

                   system("pause");
                   return 0;
             }

4、auto的用法

     -  用于代替冗长复杂、变量使用范围专一的变量声明;

     -  在定义模板函数时,用于声明依赖模板参数的变量类型;

     -  模板函数依赖于模板参数的返回值。