为了账号安全,请及时绑定邮箱和手机立即绑定

趣味 C++ 入门

难度入门
时长 3小时21分
学习人数
综合评分9.73
18人评价 查看评价
9.3 内容实用
10.0 简洁易懂
9.9 逻辑清晰
  • 我们把焦点放到这个 int a; 上面。在 C++ 中,我们通常管这行代码叫做声明了一个变量,这个变量的名字叫做 a,而前面的 int,表示这个变量可以存放一个整型的数据类型,整型的意思就是整数。

    声明常量和声明一个变量非常像,不一样的地方就是在前面加了一个 const。这个 const 代表的就是不可变的。
    查看全部
  • 首先是 (int argc,char **argv) ,这是一个参数列表。我们可以看到,这里有两个参数,第一个参数argc表示参数个数,第二个参数argv是参数组,两个参数一起表达了这个程序的启动参数。

    查看全部
    0 采集 收起 来源:main函数

    2021-07-30

  • c++中的第一个程序


    #include <iostream>

    int main()

    {

        std::cout<<"Hello World! This is C++ Style\n"<<std::endl;

        return 0;

    }

    查看全部
    0 采集 收起 来源:动手写一写

    2021-07-30

  • 我们知道,函数在工作的以后,C++ 会为函数分配相应的内存,而且还存在参数的拷贝。这些就导致函数在调用的时候会带来额外的内存消耗。

     

    但是函数又是一个可以让程序变得模块清晰的东西。那么有没有什么办法又能让我们使用函数,而又不带来更多的性能消耗呢?

     

    C++ 为我们提供了一种函数形式,叫做内联函数。在程序编译的时候,编译器会把内联函数的代码复制出来,粘贴到调用的地方。例如如下代码:

    int add(int a, int b)
    {
       return a + b;
    }

    int main(int argc,char **argv)
    {
       int a = 5;
       int b = 10;
       int c = add(a + b);

       return 0;
    }

     

    如果我们把 int add(int a, int b) 函数编程内联函数,那么这段程序在编译的时候,将会被自动处理成这样:

    int main(int argc,char **argv)
    {
       int a = 5;
       int b = 10;
       int c = a + b;
       return 0;
    }

    可以看到,经过编译器处理,这里就不再有函数的调用了。

     

    那么如何把一个函数变成内联函数呢?只需要在函数前面加 inline 关键字就可以了。

    inline int add(int a, int b)
    {
       return a + b;
    }

    联函数有好处,就是可以节省调用时候的额外开销。但是同时也会造成另外的问题,内联是以代码膨胀为代价而进行的优化,而如果一个函数过长,或者一个函数被调用了好多次,那么显然就不是适合使用内联函数优化。

     

    其实现代的编译器,会对代码进行足够的优化,有些时候,你写了内联函数,但是编译器不一定会按照内联去优化,而有的函数,你没有写内联,他却会给你优化成内联。所以大家在初学 C++ 的时候其实没必要太纠结内联函数的实际优化效果。

    查看全部
  • 以上是值传递的概念,单纯地将a的值进行调用,change函数里的a变成了4,但是main函数里面的还是5,因为change函数执行完毕就销毁了里面的变量,所以其实change和main里的a完全是两个东西。

    这里进行了址传递,因为函数本质是将a的地址传递到了change函数里,所以改变的是a地址里的数据,这样主函数和调用函数的内容就一致了。

    查看全部
  • int main(int argc,char **argv)
    {
       Week week = Week::Fri;

       return 0;
    }

    eunm 变量 类似于数组的变量=变量::变量展开定义的相对值

    enum Week
    {
       Mon, // 星期一
       Tue, // 星期二
       Wed, // 星期三
       Thu, // 星期四
       Fri, // 星期五
       Sat, // 星期六
       Sun, // 星期日
    };

    跟struct一样

    定义之后要加分号

    查看全部
  • 在函数调用的时候,依照函数定义时参数列表的顺序依次传入想要传入的值。在使用的时候,参数的顺序不可以改变。

    int func(int a, float b)

    上面的函数在调用的时候,传入的第一个参数 a 是int型,第二个参数 b 是float型。不能颠倒两者的顺序,如果颠倒,则可能发生语法错误,或者进行数据类型的隐式转换。

    查看全部
  • 在 C++ 中,函数要想使用,必须要先声明。所以我们可以在调用之后实现函数体,但是必须在调用之前声明。

    #include <stdio.h>

    //定义函数
    int avg(int a, int b)
    {
       return a + b / 2;
    }

    int main(int argc,char **argv)
    {
       int a = 10;
       int b = 20;
       int c = avg(a, b); //函数调用

       return 0;
    }

    查看全部
  • if(a == 12){
       b = a - b;
    }
    else{
       b = a + b;
       b = a - b;
    }

    等价于:

    do {
       if(a == 12){
           break;
       }
       b = a + b;
    } while(false);

    b = a - b;

    在这个语句中,while(false)永远不会运行这个循环,用于延时设计。

    while(true)会让程序一直执行,死循环。

    查看全部
  • 这就是 switch case 的特殊的地方,他在匹配到相应的 case 之后,会将后面所有的 case 从句都执行一次,直到碰到一个 break 语句。如果想让这段程序符合预期,我们就要这么写:

    #include <stdio.h>

    int main(int argc,char **argv)
    {
       int s = 5;
       switch (s) {
           case 1:
               printf("1\n");
               break;
           case 2:
               printf("2\n");
               break;
           case 3:
               printf("3\n");
               break;
           case 4:
               printf("4\n");
               break;
           case 5:
               printf("5\n");
               break;
           case 6:
               printf("6\n");
               break;
           case 7:
               printf("7\n");
               break;
           case 8:
               printf("8\n");
               break;
           case 9:
               printf("9\n");
               break;
           case 10:
               printf("10\n");
               break;
           default:
               printf("unknow\n");
       }
       return 0;
    }

    查看全部
  • 在 C++ 中,数组表示的是一段连续的内存存储空间。

    假设我们想要访问第 2 个元素(从 0 开始)

    array[1];

    那么 C++ 在碰到这行代码的时候,是先拿到第 2 个元素的地址,然后通过地址去访问元素,那么如何拿到第二个元素的地址呢?刚刚的实验证明,数组中元素的地址都是等差的,所以只要拿到第一个元素的地址,再加上相应元素的偏差,就可以拿到第二个元素的地址了。

    直接输出 array 和首元素的地址,是一模一样的,那么就可以得出一个结论:数组名是一个指向数组首元素的指针,但是这个指针和我们常见的指针有一些不一样的地方,这个指针是一个常量,所以我们是不可以对其进行修改的。

    代码中的 *(array + 2) = 1; 就等价于 array[2] = 1;

    假如想要访问第 3 个数字,我们可以把指针向后移动两个元素的位置,写成 *(p + 2)

    那么指针可不可以按照数组的访问方式去访问呢?p[2]

    其实也是可以的,p[2]和*(p + 2)在这里是等价的。

    查看全部
  • 变量只在一定的范围内有效,上面的例子中,b只在大括号(代码块)里有效。

    代码在大括号外面会自动销毁里面的变量,所以b也叫自动变量。(栈内存)

    为p指针分配一片4字节的堆内存,这样p在内存外也可以使用。

    堆内存用完之后,要用free(p)来释放这片内存。

    查看全部
  • int a=2

    int *p=&a

    等价于:

    *p=2

    野指针指的是没有指明地址的指针,直接操作会很危险

    我们可以先赋值一个空指针,但不要直接定义int *p;

    可以这样int*p=nullptr;

    查看全部
  • enum Week
    {
       Mon, // 星期一
       Tue, // 星期二
       Wed, // 星期三
       Thu, // 星期四
       Fri, // 星期五
       Sat, // 星期六
       Sun, // 星期日
    };

    int main(int argc,char **argv)
    {
       Week week = Week::Fri;

       return 0;
    }

    在这段程序里,week 这个枚举变量,只能是定义好的 7 个值,不能是其他的值,而且在赋值的时候,你可以直接看出来这个值是什么,而不用再去和数字进行对应。这样就可以最大限度得减少出错的可能性了。

    查看全部
  • %d占位符

    查看全部

举报

0/150
提交
取消
课程须知
本门课程使用 Windows 平台下的 Visual Studio 作为开发工具,所以你要准备一台 Windows 系统的电脑。当然,本门课程中介绍的所有代码,并不是只能在 Windows 下运行,你同样可以尝试使用 Mac OS X 或者 Linux 或者其他的平台进行学习,我们也鼓励你进行这样的尝试。
老师告诉你能学到什么?
掌握在 Windows 下搭建 C++ 开发环境,了解 C++ 的基础概念,例如变量,指针等。了解计算机的一些基础知识,内存布局等。除此之外,本课程还将介绍一些编程小技巧,以及编程的代码规范。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!