为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
趣味 C++ 入门_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

趣味 C++ 入门

Redknot
难度入门
时长 3小时22分
  • 大的放到小的

    左右两边标明类型

    小的放到大的

    左边表明,右边不表明

    查看全部
  • http://img1.sycdn.imooc.com//60fe68b60001b96f19201030.jpghttp://img1.sycdn.imooc.com//60fe68c10001b96f19201030.jpg

    #include<stdio.h>


    int main(int argc,char **argv)

    {

        int a=;

        short b=(short)a;

        return 0;

    }

    查看全部
  • enum Week { Mon, // 星期一 Tue, // 星期二 Wed, // 星期三 Thu, // 星期四 Fri, // 星期五 Sat, // 星期六 Sun, // 星期日 }; int main(int argc,char **argv) { Week week = Week::Fri; return 0; }
    查看全部
  • http://img1.sycdn.imooc.com//60fd3b230001a10707000449.jpg

    我们来看看这个函数里其他的部分。

    首先是 (int argc,char **argv) ,这是一个参数列表。我们可以看到,这里有两个参数,第一个参数argc表示参数个数,第二个参数argv是参数组,两个参数一起表达了这个程序的启动参数。

    另外一个是return语句,我们可以看到 main 函数有一个返回值,这个返回表示程序的执行结果。我们这个 Hello Wolrd 程序里面,返回的是 0。0 表示程序执行成功,没有出现问题。如果这里返回的是非 0 ,那么表示程序执行出现问题。

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

    2021-07-25

  • 一个程序里,有且只有一个 main 函数。程序从 main 函数开始执行,到 main 函数结束而终止。

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

    2021-07-25

  • #include <stdio.h>是什么意思?

    http://img1.sycdn.imooc.com//60fd381600014e9e03260452.jpg

    http://img1.sycdn.imooc.com//60fd38160001188a07470466.jpg

    在程序世界中,我们通常把外界将信息传递给我们的程序叫做输入,我们程序向外界传递信息叫做输出。

    http://img1.sycdn.imooc.com//60fd388f00011c5502080336.jpg

    在程序中打印Hello World!,其实就是一个标准的输出行为,因为程序向外界传输了信息,这个信息就是Hello World!。

    main()函数,没错,就是字面上看到的意思,主函数,这是一个特殊的函数,它是程序的入口函数。一个程序里,有且只有一个 main 函数。

    向世界问好核心语句  printf("Hello World!\n");  这句代码的意思是向标准输入输出流中输出一行 Hello World!,\n表示换行符。printf 这个功能在 stdio.h 中包含,这也就是为什么我们要在程序一开头就 include 它的原因。

    查看全部
  • printf("int:%d\n",sizeof(int));查看字节数目

    查看全部
  • 而在计算机中,存储数据的方式就很像电报。其实计算机中,只能存放 0 和 1 两种不同的信号,这也就是我们通常说的,计算机是二进制的。那么如何存放更复杂的数据呢?答案是排列组合。

    那么如果我们将 8 个 bit 组合起来,通过排列组合,我们就可以得到 2 的 8 次方,也就是 256 个数字的数据容量。在计算机中,我们把 8 个 bit 的容量称之为 1 个 byte, 中文叫做字节。8bit = 1 byte

    整型又可以分为有符号和无符号两个大类,这里的符号,指的其实就是正负号,有符号的数据类型,可以用来存放正数和负数,而无符号的数据类型,只能用来存放正数。

    通过观察,我们可以发现,有符号和无符号的数据容量其实是相同的,拿 char 和 unsigned char 来说,他们的容量都是 2 的 8 次方,也就是 256 个数。只不过 char 类型的范围是 [-128, 127],而 unsigned char 类型的范围是 [0, 255]。

    每种数据类型最大的差别就是他们所占的空间大小不一样,更大的数据类型拥有更大的容量,这也意味着他能装得下更多的数字,或者更多的精度。
    其实上面的表中的数据长度,只是一个常见的默认值,不同的机器会有不同的情况,C++ 标准中并没有定义某一个数据类型必须占用多少个字节的长度,C++只定义了每种数据类型长度的一个范围。

    short 要大于等于 char

    int 要大于等于 short

    long 要大于等于 int

    long long 要大于等于 long

    查看全部
  • 我们可以通过 printf 向控制台输出内容,也同样可以使用控制台向程序输入内容。输入内容,就需要用到一个函数scanf。

    函数要有返回值

    #include<stdio.h>

    #include<iostream>


    int main(int argc,char **argv)

    {

        int a=0

        int b=0

        std::cin>>a>>b;

        return 0;

    }

    scanf_s 跟printf差不多, stdcout是输出

    stdcin是输入

    查看全部
  • const 数据类型 变量

    查看全部
  • include <iostream>


    int main(int argc,char **argv)

    {

        std::cout << "Hello World!\n" << std::endl;

        return 0;

    最后那个是endl

    查看全部
  • std::cout << "Hello World!\n" << std::endl

    查看全部
  • 先打一拳的循环:do while 循环

    我们再来看看 do-while 循环,语法如下:

    do { } while(表达式 A)

    可以发现,do-while 和 while 是非常像的,不一样的是,这里多了一个 do,而且 while 放到了后面。

    而 do-while 和 while 最不一样的地方,就是 do-while 无论条件是否成立,都会先执行一次循环体内的内容。

    do-while 是一种 while 的重要补充,由 while 的先判断再循环,变成先循环再判断。

    我们来看这样一段程序

    do {     ... } while(false)

    这段程序中,我们直接在 while 的判断条件中写了一个 false。那么我们这样做了,事实上是无法构成一个循环的。既然不是循环,那么我们为什么要这样做呢?

    因为我们这里要利用一个循环的语法,来实现非循环的用途。

    我们在写程序的时候,有时候会想要做一个跳过一段程序的功能。

    if(a == 12){     // 执行跳过语句 } b = a + b; b = a - b;

    例如,在上面的程序中,如果我们想要实现这样一个需求:当 a 等于 12 的时候,就跳过b = a + b;,直接执行b = a - b;。如果 a 不等于 12,就依次执行b = a + b; b = a - b;。

    显然,实现这样一个功能,可以用 if 等的多分支结构:

    if(a == 12){     b = a - b; } else{     b = a + b;     b = a - b; }

    但是当要跳过的语句有好多行的时候,就会显得特别不方便。因此,我们可以尝试利用 do-while 语法来完成。

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

    这样,我们将 do-while 和 break 进行配合,完成一个和循环无关的程序结构。

    查看全部
  • 指针和数组的姻缘

    数组篇

    在前面及小结中,我们学习了指针和数组的概念,看起来这是两个完全不同的东西。但其实他们两者是紧密相关的,本小结我们就来探讨一下指针和数组的联系。

    我们在定义数组的时候,常常这样定义,int arr[5];

    在 C++ 中,数组表示的是一段连续的内存存储空间

    http://img1.sycdn.imooc.com//60f9b3f40001629e03670096.jpg


    如上图,每个元素之间是没有空隙的,这样每个元素的内存地址,其实也是有规律可循的。可以写这样一个程序,来验证我们的想法:

    #include <stdio.h> int main(int argc,char **argv) {     int array[5];     printf("array[0]: %p\n", &array[0]); // %p 用来打印数组的地址     printf("array[1]: %p\n", &array[1]);     printf("array[2]: %p\n", &array[2]);     printf("array[3]: %p\n", &array[3]);     printf("array[4]: %p\n", &array[4]);     return 0; }

    程序运行结果如下:

    array[0]: 0x7ffee9d81490 array[1]: 0x7ffee9d81494 array[2]: 0x7ffee9d81498 array[3]: 0x7ffee9d8149c array[4]: 0x7ffee9d814a0

    指针的地址以16进制的方式输出,可以看出,这几个地址中,每两个相邻的地址都相差 4 ,而每一个元素都是 int类型,int 占 4 个字节大小,说明他们确实是紧密相连的。

    验证了数组的地址之后,再来看看数组是如何访问数组中的元素的。假设我们想要访问第 2 个元素(从 0 开始)

    array[1];

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

    那么,对于数组来说,第一个元素的地址是什么的?答案是数组名。

    我们再尝试写一个测试程序

    #include <stdio.h> int main(int argc,char **argv) {     int array[5];     printf("array: %p\n", array);     printf("array[0]: %p\n", &array[0]); // %p 用来打印数组的地址     printf("array[1]: %p\n", &array[1]);     printf("array[2]: %p\n", &array[2]);     printf("array[3]: %p\n", &array[3]);     printf("array[4]: %p\n", &array[4]);     return 0; }

    程序运行结果如下:

    array: 0x7ffeefa29490 

    array[0]: 0x7ffeefa29490 

    array[1]: 0x7ffeefa29494 

    array[2]: 0x7ffeefa29498 

    array[3]: 0x7ffeefa2949c 

    array[4]: 0x7ffeefa294a0

    我们发现,直接输出 array 和首元素的地址,是一模一样的,那么就可以得出一个结论:数组名是一个指向数组首元素的指针

    http://img1.sycdn.imooc.com//60f9b4350001177e06710191.jpg



    但是这个指针和我们常见的指针有一些不一样的地方,这个指针是一个常量,所以我们是不可以对其进行修改的。也就是说,我们不能对其进行 array = p 或者 array++ 这样包含重新赋值的操作,但是我们仍然可以用指针的用法来操作他。

    例如,使用指针的加减法来访问对应的元素

    #include <stdio.h> int main(int argc,char **argv) {     int array[5];     *(array + 2) = 1;     return 0; }

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

    指针篇

    我们在前面讲过 malloc 分配内存的用法。来看一个例子

    #include <stdio.h> int main(int argc,char **argv) {     int * p = (int *)malloc(5 * sizeof(int));     free(p);     return 0; }

    在上面的程序中,我们分配出来了一个 5 个 int 大小的储存空间:

    http://img1.sycdn.imooc.com//60f9b481000172eb06310181.jpg

    在这块储存空间内,可以存放 5 个 int 类型的数字,假如想要访问第 2 个数字,我们可以写*(p + 2)

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

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

    查看全部
  • 定义结构体的图片60f8240b0001be6e12800800.jpg
    查看全部

举报

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

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