目前,我没想过要怎么深入学习,就是能用起来,能看懂代码,把玩起来,不要那么费劲即可。我也建议大家学的时候囫囵吞枣,现在计算机行情变化很快,要学的东西都比较多,将来能走什么方向,做成什么程度,完全靠缘分。
C语言 | 库少 有点弱 | 语法类似 |
C++语言 | STL库丰富 学得多 | 语法类似 |
编译器选择:Linux 系统应该自带cpp,Windows系统的cpp要自己下载 MinGW,按照win10下安装gcc_stupid Kid的博客-CSDN博客_gcc下载安装windows10 装一下,配置上环境变量,一个cmd下,来一个 gcc -v 命令 安装完成。
IDE选择:
1.我使用的是Clion,需要下载的小伙伴可以,移步到CLion:JetBrains 出品的 C 和 C++ 跨平台 IDE
刚刚下载的IDE,输出汉字,可能会有乱码。关于IDE的乱码问题解决,请移步这里进行配置:【C语言】CLion中文乱码问题的解决方案_星拱北辰的博客-CSDN博客_clion中文乱码 。
2. 你也可以使用visual studio 2022也是一个很好用的IDE选择。
![](https://i-blog.csdnimg.cn/blog_migrate/236d0e4bd30c5cce378aeb6f9783ffbc.png)
C语言Helloworld:
新建一个helloworld.c 文件, 感受一下:
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
编译的时候,要注意 使用gcc 命令时候,可以用 -o 可执行文件名 指定exe文件的名字,因为它会默认生成 a.exe,如果不在乎a这个名字,也无所谓。
gcc .\helloworld.c -o helloworld
输入这个exe执行文件名 ,
.\helloworld.exe
hello world 就会在console 控制台上输出出来了。
这便是一个C语言helloworld程序。让我们来看下代码中的注释:
第一行代码: # 是预处理标示,用来对文本进行预处理操作,include 是预处理指令,它的后面跟着一对尖括号,表示头文件在尖括号内读输入。 stdio.h 是标准IO头文件,由于我们用到printf()输出函数,所以要加入此文件,类似Java的导包。
第二行代码:main是程序的入口,跟你的嘴巴一样,每个C程序,有且仅有一个,程序总是从main函数开始执行的。int是返回值,{ } 中的内容是函数体 —— 程序的具体的操作,被包起来的地方都叫做一个语句块。
然后printf()就是一个格式化输出函数,\n 就是一个换行符号。return 的作用就是将函数执行的结果返回,和main 前面的返回值类型 int 遥相呼应 。在程序中,0一般表示正常,-1表示异常。
C++语言的Helloworld:
上面不是安装了MinGW和配置了环境变量,现在只需要下载一个IDE就可以写C++程序了。IDE这块,爱用啥用啥,因为一直对JetBrains 的一套配置和快捷键都非常熟悉,对于IDE方面,我也改烦了,我使用是仅仅是依据个人历史习惯,我的观众老爷,你爱用啥都行!尊重你的选择,respect your choice!
#include <cstdio> // 包含头文件。似乎没有C 语言中那个 .h 了。
// C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
using namespace std; //C++的命名空间 ,区分不同的代码功能; 避免不同代码片段同时使用时, 因变量名相同而造成冲突。
int main()
{
printf("hello world!");
return 0;
}
以上涉及的知识点:
1.c语言文件 以 .c结尾,c++文件以.cpp结尾。
2. #include 引入头文件。
Preprocessor statement 预处理语句 that everything begins with a hash。都以hash散列作为开头的东西。 会在编译前,把这个file 整个include过来,就相当于你复制然后粘贴整个文件过来一样。
首先C语言 的头文件加了.h文件的,但是C++是没有的。另外<> 和 ”“ 的区别。
#includ <系统默认目录范围的头文件> 尖括号,编译器只在系统默认目录或尖括号内的工作目录下搜索头文件,不会去用户的工作目录下寻找,所以一般尖括号用于包含标准库头文件. 如:#include <iostream> 它会直接到标准函数库中找。 #include "iomanip" (1).在包含当前include指令的文件所在的文件夹内搜索; (2).如果上一步找不到,则在之前已经使用include指令打开过的文件所在的文件夹内搜索,如果已经有多个被include的文件,则按照它们被打开的相反顺序去搜索; (3).如果上一步找不到,则在编译器设置的include路径内搜索; (4).如果上一步找不到,则在系统的include环境变量内搜索。 所以双引号一般用于包含用户自己编写的头文件。 所以,一般我们引用标准函数库的时候,就#include<标准函数库头文件>,一击必中,不用来回迂回,非常用有效率。如果我们自己写的头文件,不属于标准函数库,这个使用使用 #include "",先从离自己最近的地方开始找。 3. main函数(entry point 入口)由操作系统来进行调用,main函数走到return语句就会执行结束并返回结果。main函数都结束了,那么main函数的返回值还有何用? 一般来说main函数的返回值,没有什么用。在C++的语言里,如果不写return 编译也不会报错,等效于你写了 return 0. 体验完了Helloworld,我们正式看一下变量和数据类型的问题。
变量和数据类型:
再来看一段代码,并注意下列问题:
- 变量的定义语法:类型名 变量1,变量2...变量n ,及命名规则。
- C++的输入输出,
- 单行多行注释表示
#include <iostream>
using namespace std;
/**
* 数字和字符 的 输入输出。
* @return 程序是否正常结束 ,0 正常
*/
int main(){
//先定义两个变量,放整数的。 语法:类型名 变量1,变量2...变量n
int a,b ;
// c++输入,通过scanf()函数来实现的。
scanf("%d%d",&a,&b);// &a 表示要把输入的整数放入变量a
printf("%d",a+b);
char c,d,e;
scanf("%c%c%c",&c,&d,&e);// %c 表示读入一个字符,不会跳过空格。
printf("%c%c%c",a,b,c);
return 0;
}
C++ 的基本数据类型
![](https://i-blog.csdnimg.cn/blog_migrate/a11d06892aed4616d2d2f0ec67b9a8a2.png)
c语言long和int区别:short与long两个限定符的引入可以为我们提供满足实际需要的不同长度的整形数。int通常代表特定机器中证书的自然长度。short类型通常为16位,long类型通常为32位,int类型可以为16位或32位。
各编译器可以根据硬件特性自主选择合适的类型长度,但要遵循下列限制:short与int类型至少为16位,long类型至少为32位,并且short类型不得长于int类型,而int类型不得长于long类型。
short、int和long类型都表示整型值,存储空间的大小不同。一般,short类型为半个机器字长(word)长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中int类型和long类型通常字长是相同的)。
sizeof运算符:
若想知道到底多少个字节,可用sizeof(变量名或类型名) 能够得到某个变量或类型变量占用的字节数。
#include <iostream>
using namespace std;
/**
* 数字和字符 的 输入输出。
* @return 程序是否正常结束 ,0 正常
*/
int main(){
int n1 = 10;
double f;
char c;
printf("%d,%d,%d,%d",
sizeof(n1), sizeof(short),sizeof(double ),sizeof(c));//4,2,8,1
}
变量在定义的时候,给予一个初始值叫做变量的初始化,对于变量来说,没有初始化的变量,其值一般是不确定的。
整数类型:
有符号整数,最左位 为符号位,符号为0时表示正数,符号为1为负数。对于正数,其绝对值就是符号位以外的部分的二进制表示的值,而负数的绝对值,是符号位以外的部分取反后再加1。
1.如何获取一个数的二进制表示:
有符号 int 第一位是0 则是正数,第一位是1 则为负数。
对于负数的绝对值,是符号位以外的部分取反后再加1。
需求: 我们想用8bit的二进制表示-3
做法: -3,负号的首位 毋庸置疑 设置为1 ,
现在就处理剩下7个bit
先表示3 000 0011
取反 111 1100
加1 111 1101
添加上符号位 1111 1101
2.逆向过程,从一个二进制表示的负数 1111 1101 ,获取易读的表示(我觉得十进制更易读)
先看首位 是1,那么就写个负号 ,
再看剩下的7位数取反 0000010 ,这是2
再加1, 为得到绝对值为3,负号则乘以-1,我们可知其值为 -3.
精华就是:相互转换都一样的玩法,先搞定符号位,剩下位数取反加一。
数据类型的自动转换:
有些不同的类型之间可以相容得,可以互相赋值,这就是数据类型的自动转换。
int a = 12.34; // 12.34会自动转换为12后赋值给a
int b =567;
double d = b; //d 的值为567.0
//字符类型也可以转成整数。 就是一个8位表示的char 也是可以转为整数。
int k = 'a'
printf("%d",k) // 97
//整数的后8位也可以转换为char ,就是前面的都会丢失了。
int n =98;
char k =n;
Printf("%c",k); //输出:b
都是学了这么多语言了,这些东西能用起来就差不多,后面没有质量的代码,不再敲了。下一节,来介绍一下常量。