速通C语言第一站 一篇博客带你初识C语言
感谢佬们支持!
文章目录
- 前言
- 一、C语言的前世今生&&如何写C语言
- 二、初识C语言
- 1. 第一个C语言程序(万恶之源)
- 2. 数据类型
- 计算机中的单位
- 介绍各种类型
- 各数据类型的大小
- 3 常量、变量
- 定义变量的方法
- 变量的分类
- 变量的作用域和生命周期
- 常量的分类
- 4 字符串
- 5 转义字符
- 转义字符定义
- 常见转义字符
- 6 注释
- 注释的作用
- 注释的方式
- 7 初始选择语句
- 8 初始循环语句
- 9 初始函数
- 函数的结构
- ADD函数的实现
- 10 初始数组
- 数组的定义
- 数组的结构
- 数组的访问
- 11 初识指针
- 指针的定义
- 如何存放及打印地址
- 指针的大小
- 指针的作用
- 12 初识操作符
- 算数操作符
- 移位操作符
- 位操作符
- 单目操作符
- *关于原码、反码、补码的科普
- 关系操作符
- 逻辑操作符
- 条件操作符(三目操作符)
- 逗号表达式
- 下标引用、函数调用和访问结构体成员的操作符
- 13 常见关键字
- 14 define定义的常量和宏
- define定义符号
- define定义宏
- 15 初识结构体
- 自定义类型
- 结构体的定义
- 结构体的声明&&结构
- 结构体的创建和初始化
- 结构体的访问
- 总结
前言
上篇博客我们浅略说明了为什么编程之路要从C语言展开,但我们并不了解它,在具体学习之前,我将用一篇博客带大家初始C语言。
一、C语言的前世今生&&如何写C预言
简单来说,在早期我们让计算机做什么事,都是通过写二进制序列的方式实现的。显然,这种方式非常麻烦。
后来,人们通过将特定的二进制序列起名字的方式创造了汇编语言。这大大节省了时间及精力。
再后来,人们觉得汇编语言也很麻烦,经过一系列衍生,C语言产生了。20世纪80年代,美国国家标准局为C语言制定了一套完整的标准语法,称为ANSI C。
写C语言,我们需要下载一个编译器。
工欲善其事,必先利其器 。市面上那么多编译器,改选那个呢?
我个人推荐用 VS2019,因为它是一个集成开发环境,不需要配置环境,而且在企业中使用率也很高。相比之下,VScode和codeblocks都需要配置环境,对新手不太友好。另外的VC6.0则是又老兼容性又差,Dev c++ 十年没更新过了,且敲出的代码不美观,不利于形成良好的代码风格。
二、初始C语言
1.第一个C语言程序(万恶之源)
#include<stdio.h>int main()
{printf("hello world");return 0;
}
这个程序的作用是将 hello world 打印到屏幕上。如下图:
看起来这段程序很复杂,我们将分行讲解一下。
1.程序的第二行表示主函数(main函数),其中 main 为函数名,int 为这个函数的返回类型。
下面有一对大括号,我们把大括号括起来的中间部分叫函数体。
2.函数体中第一行中的 printf 是实现打印hello world 的东西。这是C语言编译库中为你提供(实现好)的一个函数,我们可以调用它为我们实现打印功能。C语言编译库中有很多的库函数,这只是其中一个。
3.但是库函数是不能随便调用的,我们必须引头文件。如程序第一行 #include<stdio.h>。其中,stdio.h为printf 的头文件名称。
4.在函数体最后一行中,是return 0;在C语言中约定返回0是正常返回,非0为异常返回。
2.数据类型
在介绍数据类型之前,我们先来了解一下计算机中的单位。
bit(比特位)-------于二进制中储存1/0
byte(字节) = 8 bit tb = 1024gb
kb =1024byte pb = 1024tb
mb =1024kb
gb =1024mb
介绍各种类型
初阶的数据类型大致分为两大家族,一类为整形家族,包括
char(字符数据类型)
(注:char类型在储存字符时存的是其ASCII码,故属于整形)
short(短整型)
int(整形)
long(长整型)
long long(更长的整形)
另一类是浮点型家族,包括
float(单精度浮点型)
double(双精度浮点型)
(双精度浮点型精度>单精度)
各数据类型的大小
char | 1 byte |
short | 2 byte |
int | 4 byte |
long | 4 byte |
long long | 8 byte |
float | 4 byte |
double | 8 byte |
那么类型的作用是什么?创建变量。
3.常量、变量
生活中有很多东西是不变的,比如身份证号;有很多东西是可变的,比如年龄。
在C语言中,我们把不变的值叫常量,变的值叫变量。
定义变量的方法
1.不能以数字开头
2.不超63个字符
3.区分大小写
示例
int age=20;
//每过一年
age=age+1;
变量的分类
变量分为局部变量和全局变量。全局变量作用于全局范围为,而局部变量作用于局部范围。通俗来讲,大括号内的是局部变量,大括号外的是全局变量。
//局部变量int main()
{int a=100;return 0;
}//全局变量int a=100;
int main()
{return 0;
}
当全局变量和局部变量名字冲突时,局部优先。
int a = 100;int main()
{int a = 10;printf("%d", a);return 0;
}
当然,我们最好不要让局部变量和全局变量名字相同。
变量的作用域和生命周期
作用域通俗来讲就是一段代码中所用到的名字有效的范围
局部变量:变量所在的局部范围。
全局变量:整个工程但是不能跨文件。
生命周期是变量的创建到变量的销毁之间的时间段。
局部变量:进入作用域生命周期开始,出作用于生命周期结束。
全局变量:整个程序的生命周期。
当一个变量的生命周期结束,我们就不能使用它/找到它了
示例:
int main()
{int a = 10;printf("%d", a);return 0;//printf("%d ", a);
}
成功打印
int main()
{int a = 10;//printf("%d", a);return 0;printf("%d ", a);
}
打印失败
常量的分类
1.字面常量,就是直接写出来的常量
int main()
{3.14;return 0;
}
2.const 修饰的常变量
int main()
{const int a = 10;a = 20;//修改a会报错return 0;
}
a的本质是变量,const的修饰限定了他的改变,让他变成一个常量。
在后期const将非常有用,对于不想修改的变量,我们可以在前面加上const进行保护。
3 #define 定义的标识符常量
#define MAX 10000
#include<stdio.h>
int main()
{int a = MAX;printf("%d ", a);return 0;
}
当我们对MAX进行改变时,也会报错,由此可见,MAX为常量。
4可以一 一列举的常量(enum枚举)
enum Sex
{MALE,//0FEMALE,//1//从0开始 从上之下
};
int main()
{enum Sex s = MALE;printf("%d %d %d\n", MALE, FEMALE);//0 1 MALE = 2;//报错
}
当我们对MALE进行改变时,也会报错,由此可见,MALE为常量。
在后期,enum的枚举关键字将会对我们编写项目的菜单有所帮助哦
4 字符串
字符串就是用双引号括起来的一串字符。字符串自带一个结束标志 ‘ \0 ’。
int main()
{"abcdef";return 0;}
\0 作为结束标志,不算作长度。
int main()
{//用strlen求字符串长度int len = strlen("abc");printf("%d", len);return 0;
}
字符串会自带 \0,但是字符数组不会。
#include<stdio.h>#include<string.h>
int main()
{char arr1[] = { "abc" };char arr2[] = { 'a','b','c' };return 0;
}
调试一波查看一下arr1和arr2的成员,可以看到arr1有\0, arr2 没有。
一旦没有了\0,arr2的长度就是随机的了,它会一直向后计算,直到遇到\0。
5 转义字符
所有的 ASCII码 都可以用“\”加数字(一般是8进制数字)来表示。而 C 中定义了一些字母前加""来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符
常见转义字符
(有的不太重要,会加*)
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\' | 用于打印一个单引号 |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用于打印一个 \ |
\a | 电脑蜂鸣* |
\b | 退格符* |
\f | 进纸符* |
\n | 换行 |
\r | 回车* |
\t | 水平制表符(8个空格)* |
\v | 垂直制表符* |
\ddd | ddd表示1 - 3个八进制数字. 如:\130 (输出x) (十进制为88,ASCII码为x) |
\xdd | d表示2个十六进制数字.如\x30(输出0)(十进制为48,ASCII码为0) |
6. 注释
注释的作用
1 屏蔽掉没用的代码
2 添加文字注释,方便理解(好习惯)
注释的方式
1.c++风格(推荐)
int main()
{//char arr1[] = { "abc" };//char arr2[] = { 'a','b','c' };return 0;
2. c风格(不推荐)
int main()
{/*char arr1[] = {"abc"};char arr2[] = { 'a','b','c' };*/return 0;
}
在后期学预处理时,我们还会接触到一种有注释功能的操作
#if 0 和 #endif
#if 0#define MAX 10000
#include<stdio.h>
int main()
{int a = MAX;printf("%d ", a);return 0;
}#endif
7. 初始选择语句
在C语言中,有三种结构:顺序结构,选择结构,循环结构。
例:如果 一刚 好好学习,校招时能拿到一个好offer,如果他不好好学习,就回家卖烤面筋。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{//输入的值int input = 0;printf(" 一刚要好好学习吗?(1/0)");scanf("%d", &input);//选择if (1 == input){printf("好offer");}else{printf("卖烤面筋");}return 0;
}
其中,"好offer"和"卖烤面筋"就是两个选择。目前只是初识,其他的知识要在后面学习哦
8 初始循环语句
有些事是需要循环做的,比如写代码,学习
在C语言中循环有while循环,for循环,do...while循环
这里先给一个while循环的例子
我们写代码,假设写3万行代码就能拿到一个好offer
#include<stdio.h>
int main()
{int line = 0;while (line < 30000){printf("接着写代码");line++;}if (30000 == line){printf("好offer");}return 0;
}
9 初识函数
众所周知,C语言中有很多库函数,但如果只靠库函数就能解决问题,那还要我们程序员什么用?
所以我们也可以实现一个函数解决功能。
函数的结构
和之前我们介绍的main函数相同,我们自己实现的函数也有类似的结构
实现ADD函数
#include<stdio.h>int ADD(num1, num2)
{return (num1 + num2);
}int main()
{int num1 = 0;int num2 = 0;scanf("%d %d", &num1, &num2);int sum = ADD(num1, num2);printf("%d ",sum);return 0;
}
我们输入2 3,输出了5。
10 初始数组
数组的定义
所谓数组,就是一组相同类型元素的集合
数组的结构
我们先初始化一个储存int类型的数组
数组的访问
数组是通过下标访问的。下标从0开始,范围是0~(元素个数-1)。
以上面的元素为例,
arr[0] | arr[1] | arr[2] | arr[3] | arr[4] | arr[5] | arr[6] | arr[7] | arr[8] | arr[9] |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |
注意:访问数组中没有的下标叫做越界访问。越界访问可能会导致程序崩溃,程序出错等严重后果。而且编译器也不会报错提醒,我们要避免越界访问。
11 指针
指针的定义
内存是电脑上特别重要的存储器,分为一个个内存单元,每个内存单元大小为一个字节,
我们对每个单元用16进制进行编号。我们称这个编号为地址,我们将地址起名为指针,或者说用指针指向地址。
例:输入int a= 10; ,a分配了4个字节的空间
int main()
{int a = 10;return 0;
}
我们打开调试查看内存,输入&a(只能拿到第一个字节的地址)
得到了0x0113FB64,它就是存a的地址
(注:地址右边从右向左看是00 00 00 10正好是a的值。至于为什么是从右向左看而不是从左向右看,这就要等到后面的学习了)
如何存放及打印地址
我们创建一个变量pa用来存放地址,我们称这个变量为指针变量。而pa也有它的类型int* 。
用printf打印时我们要用%p
#include<stdio.h>
int main()
{int a = 10;printf("%p", &a);return 0;
}
指针的大小
由于指针是存放地址的,所以它的大小与执行对象的数据类型无关。
在32位机器下是32比特位,也就是4字节。
在64位机器下是64比特位,也就是8字节。
12 . 初识操作符
算数操作符
+(加) -(减) *(乘) /(除)% (取余)
我们重点放到后两个操作符上
/(除)
我们知道,在数学中 9 / 2=4.5
那么在C语言中怎么样呢?
#include<stdio.h>
int main()
{int a = 0;a = 9 / 2;printf("%d", a);return 0;
}
为什么是4而不是4.5呢?因为a被定义为了int (整形),所以只能处理整形。
如果我们将a定义为了浮点型,9或2改成小数形式,再以浮点型打印,结果就能得到小数了。
#include<stdio.h>
int main()
{float a = 0;a = 9 / 2.0;printf("%f", a);return 0;
}
%(取余)
取余这个操作符的功能就是它的名字:"取出余数"。
int main()
{int a = 0;a = 9 % 2;printf("%d", a);return 0;
}
9 = 2 * 4 + 1;所以1是余数
注意:% 两端的操作数必须为整数
移位操作符
>>(右移) <<(左移)
移位移位,移的是什么位呢?移的是2进制位。
例:
int main()
{int a = 2;int b = a << 1;printf("%d ",b);return 0;
}
得到结果
光看可能不太好想,我们画个图分析一下。
1向左移了移位,所以从2^1--->2^2 , 也就是4
位操作符
&(按位与) | (按位或) ^(按位异或)
这三个操作符同样也是对二进制位做事的,我们在之后的学习中在做介绍。
赋值操作符
= += - = *= %= /= &= ^= |= >>= <<=
赋值操作符是非常好理解的东西。
int main()
{int a = 0;//假设我要将a+5赋给a//1.a = a + 5;//2.a += 5;return 0;
}
别的操作符同理。
单目操作符
所谓单目操作符,就是只有一个数操作数的操作符,像+、-有两个操作数,就是双目操作符
!(逻辑反操作) -(负值) +(正值) &(取地址) sizeof(求操作数的类型长度)
~(对一个数的二进制位按位取反) ++、--(前/后置++、--) (类型)(强制类型转换)
!(逻辑反操作)
在C语言中,0表示假,非0表示真。
int main()
{//真int a = 10;//假printf("%d", !a);return 0;
}
得到结果0表示假。
另外,如果a不等于0,有 if(a) 表示"条件为真,执行操作",if(!a)表示"条件为假,不执行操作"。
+、- 较为简单,这里就不讲了。& 我们在指针中再做讲解会更好。
sizeof 用于操作数的类型长度,这里先给一波例子。
int main()
{int a = 10;printf("%d ", sizeof(int));printf("%d ", sizeof(a));//括号可省printf("%d ", sizeof a);
}
int 是4个字节;a是int类型,所以也是4个字节;因为括号可省,所以也是4个字节。
再给一波数组的例子:
int main()
{int arr[10] = { 0 };printf("%d\n", sizeof(arr));printf("%d\n", sizeof(arr[0]));}
1个int 4个字节,10个就是40个字节;而其中的某个元素就是1个int,也就是4个字节。
由此,我们得出了一个求数组元素个数的操作,这个操作再后续的学习中会经常用到。
//40/4=10int sz = sizeof(arr) / sizeof(arr[0]);
~用于把一个数的二进制按位取反,也就是把1变成0,0变成1
这里对原码,反码,补码进行一波科普,这对我们之后的学习非常重要。
*关于原码、反码、补码的科普
首先为什么会有原码反码补码这种东西?
原反补的概念主要是针对负数的,假设我们做 a-b 的运算,由于CPU只有加法器,所以a-b会转化为a+(-b)来计算,如果直接用本来的二进制位(原码),结果是算不出来的,这都是负数的锅,所以我们对负数进行原、反、补、的转换。而正数的原、反、补相同。
原码:原本的二进制位,为了区分正负数,高位是0的为正数,高位为1的为1负数。
例:1的二进制为:00000000 00000000 00000000 00000001
-1的二进制为:10000000 00000000 00000000 00000001
反码:符号位不变,对原码进行按位取反
例:-1的反码为 : 11111111 11111111 11111111 11111110
补码:反码加1
例:-1的补码为 : 11111111 11111111 11111111 11111111
如果我们在计算a-b时用补码计算,就可以得到正确结果。
所以,整数在内存中存的是补码,用%d打印出来的是原码。
前/后置++/--
前置++/-- : 先++/--,后使用
后置++/-- : 先使用, 后++/--
例:
int main()
{int a = 10;int b = ++a;//a=a+1,b=aprintf("a=%d b=%d\n", a, b);
}
int main()
{int a = 10;int b = a++;//b=a,a=a+1printf("a=%d b=%d\n", a, b);return 0;
}
(类型) 强制转化类型
int main()
{int a = 3.14;printf("%d", a);
}
由于int 是整形,所以无法打印出3.14
我们可以对3.14强制类型转化为int,就能打印出3
int main()
{int a = (int)3.14;printf("%d", a);
}
关系操作符
>(大于) <(小于) >=(大于等于) <=(小于等于) ==(等于) !=(不等于)
这几个比较好理解,我们就一笔带过。
逻辑操作符
&&(并且) ||(或者)
我们可以通过物理电路来理解。
&&就相当于串联电路,只有2个开关同时闭合才能接通电路。
而 || 就相当于并联电路,任意打开一个开关就能接通电路。
下面我们给一个代码的例子
int main()
{int a = 1;int b = 0;if (a && b){printf("hehe\n");}if (a || b){printf("haha\n");}
}
由于a&&b为假,a||b为真,所以打印haha。
条件操作符(三目操作符)
exp1 ? exp2 :exp3 (注:exp1、2、3均为表达式)当调用时,
如果exp1成立,exp2计算,整个表达式为exp2的值;
如果exp1不成立, exp3计算,整个表达式为exp3的值.
例:求两个数中的最大值
如果用if-else方法
int main()
{int a = 0;int b = 3;int max = 0;if (a > b){max = a;}else{max = b;}printf("%d",max);return 0;
}
但如果用三目操作符
#include<stdio.h>
int main()
{int a = 0;int b = 3;int max = a>b?a:b;printf("%d",max);return 0;
}
也可以达到效果。
逗号表达式
用逗号隔开的一串表达式。
exp1, exp2, exp3, …
从左向右计算,整个逗号表达式时最后一个表达式的值。
例:
int main()
{int a = 0;int b = 3;int c = 5;int d = (a = b + 2, c = a - 4, b = c + 2);//a= 5,b = 3; c = 1printf("%d", d);
}
由于最后一个表达式为b,所以d==b,即打印3
下标引用、函数调用和访问结构体成员的操作符
下标引用[] 、函数引用() 、 结构体成员访问 . ->
下标引用操作符
例:
#include<stdio.h>
int main()
{int arr[10]={1,2,3,4,5,6,7,8,9,10};printf("%d ",arr[5]);
}
函数引用操作符
printf("hehe");
其中的()就为函数引用操作符。
访问结构体成员的操作符先放到 初识结构体 中讲解,大家可以通过目录跳转哦。
13 常见关键字
C 语言标准中规定了32个关键字,像int这些我们已经较为熟悉了,这里我们介绍存储类型的几个关键字:auto、extern、register、typedef、static
auto
声明自动变量,由于每个局部变量均由auto修饰,所以一般省略不写
extern
用于声明外部符号。
例:
我们创立两个源文件
在4ever.c中
int g_val = 2023;
在test.c中
extern int g_val ;int main()
{printf("%d", g_val);return 0;
}
由于有extern声明g_val,所以可以成功打印
register
寄存器关键字,可将变量存于寄存器中。
在介绍之前,我们先进行一波科普。
数据在计算机中可存于5个地方:
网盘、硬盘、内存、高速缓存、寄存器。
从左至右,内存越来越小,造价越来越贵,但速度越来越快。
那么,寄存器关键字存在的意义是什么呢?
如果我们用register修饰了某些变量,当读取数据时,计算器先去寄存器中读取,如果没有读取到,再去高速缓存区中读取,最后才是内存,这大大提高了效率。
typedef
typedef用于对类型进行重命名,在后续的通讯录、顺序表、链表中会用到typedef对冗长的结构体进行简化。
例:
typedef unsigned u_intint main()
{u_int num = 100;return 0;
}
static
static有三个作用
1 修饰局部变量 2 修饰全局变量 3 修饰函数
1 修饰局部变量
例:
void test()
{int a = 1;a++;printf("%d ", a);
}int main()
{int i = 0;while (i < 10){test();i++;}return 0;
}
分析:由于a是局部变量,所以出了test一定会销毁,所以每次打印2。
如果加上static修饰呢?
void test()
{static int a = 1;a++;printf("%d ", a);
}int main()
{int i = 0;while (i < 10){test();i++;}return 0;
}
由结果我们可以看到,经过static修饰后,a的生命周期被改变了(但并未改变作用域),导致a并未销毁。这其中的本质是什么呢?
在内存中,我们目前大致分为栈区、堆区、静态区。
而static修饰局部变量的本质就是将a的存储类型由栈区变为静态区。
2 修饰全局变量
回忆在extern中1的例子,当我们申请了两个源文件时,用extern声明就可以成功打印g_val。
但如果在g_val前加上static修饰,使这个变量仅可以在自己的源文件使用,就无法打印了。
这其中的本质是:全局变量之所以能在其他源文件内部使用,是由于其具有外部链接属性,但是被static修饰之后,就变成了内部链接属性,其他源文件就不能链接到这个静态局部变量了。
3 修饰函数
修饰函数与修饰全局变量相似,都是将外部连接属性变为内部连接属性,且本质也是缩小了作用域。
给一波例子:
同样创建两个源文件
test.c中
#include<stdio.h>
extern int ADD(int x, int y); int main()
{int a = 10;int b = 20;int sum = ADD(a, b);printf("%d ", sum);return 0;
}
ADD.c中
int ADD(int x,int y)
{return x+y ;
}
显然,程序能输出结果30
而当函数被static修饰时,就会报错了。
14 define定义常量和宏
define定义符号
在常量中我们已经了解到,define可以定义常量。
#include<stdio.h>
#define MAX 10000
#define STR "abcdef"
int main()
{printf("%d ",MAX);printf("%s ",STR);return 0;
}
输出:10000 abcdef
define定义宏
宏可以粗略理解为处理简单逻辑的函数,但其实二者的处理逻辑是不同的,这就要等到之后预处理的学习啦。
例:用宏实现两个数相加。
#include<stdio.h>
#define ADD(x,y) (x+y)
int main()
{printf("%d\n", ADD(2, 3));return 0;
}
最后输出 5。
15 初识结构体
自定义类型
自定义类型包含:结构体、枚举、联合体
结构体的定义
在C语言中存在着许多类型,但是他们只能表示部分数据,并不能描述一个复杂的事物,于是就引出了结构体。
结构体的声明&&结构
例:
struct stu
{char name[20];int age;double score;
}stu1;
其中,struct表示结构体关键字,stu为结构体标签,大括号中间的3个变量为该结构体的3个成员变量,stu1表示你创建了一个该类型的变量。
结构体的创建和初始化
struct stu s = { "一钢",18,98.9 };
结构体的访问
结构体的访问有两种方式:传值和传址。
传值需要用到 . 操作符
printf("%s %d %lf", s.name, s.age, s.score);
传址需要用到 -> 操作符,还要先对s取地址
struct stu* ps = &s;
printf("%s %d %lf", ps->name, ps->age, ps->score);
总结
做总结,我用这篇博客简单的带大家初识了一下C语言,后续会深入剖析各个重要章节。水平有限,还请各位大佬指正。如果觉得对你有帮助的话,还请三连关注一波。希望大家都能拿到心仪的offer哦。
每日gitee侠:今天你交gitee了嘛?
速通C语言第一站 一篇博客带你初识C语言相关推荐
- Flutter基础篇(2)-- 老司机用一篇博客带你快速熟悉Dart语法
版权声明:本文为博主原创文章,未经博主允许不得转载.https://www.jianshu.com/p/3d927a7bf020 转载请标明出处: https://www.jianshu.com/p/ ...
- 【算法篇】/*一篇博客带你详细了解马踏棋盘问题*/(java语言实现)
[前言]本文部分内容引用于b站尚硅谷老师的资料,如有侵权,请及时联系作者! hello大家好! 我依然是你们熟悉的槿凉.那么最近呢由于躺平了几天,也没有来得及更新博客,没有办法啦!学校封的严严实实,闷 ...
- 【C++基础】C++入门篇之一篇博客带你看懂为什么学习C++,C语言和C++的主要区别
C++入门篇 C++入门 C++关键字(C++98) 命名空间 命名空间的用法 命名空间的嵌套 命名空间会被合并 命名空间的使用 C++的输入输出 缺省参数 函数重载 重载分类 重载原理 引用 引用用 ...
- java map集合的等号改为逗号_老司机用一篇博客带你快速熟悉Dart语法
[前言]Dart语言是使用flutter框架开发时候必备的语言,flutter是一个跨平台的框架,一套代码就可以完美实现安卓和ios两个平台,适配也很不错,Dart语言很友好,和java很类似,学习成 ...
- Dart的语法详解系列篇(1)---- 老司机用一篇博客带你快速熟悉Dart语法
声明:本文是作者AWeiLoveAndroid原创,版权归作者AWeiLoveAndroid所有,侵权必究.如若转发,请注明作者和来源地址!未经授权,严禁私自转载! _________________ ...
- 一篇博客带你轻松应对java面试中的多线程与高并发
1. Java线程的创建方式 (1)继承thread类 thread类本质是实现了runnable接口的一个实例,代表线程的一个实例.启动线程的方式start方法.start是一个本地方法,执行后,执 ...
- 一篇博客带你熟悉Eclipse、AndroidStudio下搭建NDK环境(内有Demo)
文章目录 一.NDK可以干什么 二.NDK开发环境搭建 三.一个简单的NDK小案例的编写 一.NDK可以干什么 NDK:(Native Development Kit),原生开发工具包是一组可以让您在 ...
- 一篇博客带你轻松应对Springboot面试
1. SpringBoot简介 SpringBoot是简化Spring应用开发的一个框架.他整合了Spring的技术栈,提供各种标准化的默认配置.使得我们可以快速开发Spring项目,免掉xml配置的 ...
- 一篇博客,带你找回登录密码
是不是经常忘记这个登陆密码,但是打开浏览器登陆页面又有密码,但是又可以登录进去,怎样能看到密码呢? 就像这样: 想知道密吗? 今天告诉你两个查看明文的密码方法 1.打开都登陆页面,打开控制台(F12 ...
最新文章
- QIIME 2教程. 13训练特征分类器TrainingFeatureClassifiers(2021.2)
- Linux内核调试 - 一般人儿我都不告诉他(一)【转】
- 开源图像编辑器 GIMP 开发者透露 2019 年计划
- JEP 342:JVM和幽灵
- Dom4j完整教程~属性相关
- 用户需求源源不断,阿里云网络创新不止
- from gi.repository import Gtk, GObject
- 图像处理基本算法-直方图均衡
- c ++异常处理_C ++中的异常处理
- Java实现简单计算器
- 信息化建设成功的重要因素
- 建议收藏!高企申报全流程梳理:带你了解安徽省及16市高企申报的内容及要点
- Python包pretty_errors
- 身价过亿的妖媚子对小码农说串口能传送我的爱吗?
- 人脸图像的几何归一化和灰度归一化
- 上网行为管理设备网桥部署方式
- 软件开发外包管理的“一二四”
- ORA-64203: 目标缓冲区太小, 无法容纳字符集转换之后的 CLOB 数据
- 左手坐标系vs右手坐标系
- matlab凯塞窗设计,转载:用MATLAB设计FIR滤波器的方法解析