前言
学习C语言的第一步,肯定是要先去学习了解一下相关的概念和符号,我们写的代码就是由一堆规定好的有特殊含义的符号组成的。
1、数据类型
C语言的数据类型细分出来会有很多种,每种数据类型占内存大小都不同,对于刚接触编程语言的人来说,确实很让人头疼。其实存在这么多的类型,是为了能够更加丰富的表达生活中的各种值。比如钱,既有面额100元、50元、10元的,也有1元、1角甚至是1分的。如果我们手里有一张百元大钞,去商店购物看到有一件打折后卖98元的衣服,那我们可以直接用手里的一百元去付钱就行了,但是当你看到了儿时很喜欢吃的糖,还是卖1角两个,这个时候你再拿着100去买,就有点不合适了。对于数据存放在内存中也是同样的道理,太大浪费,太小又装不下。
我们常用到的数据类型有:
char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数
以上的每⼀种数据类型都有自己的长度,使用不同的数据类型,能够创建出长度不同的变量,变量长度的不同,存储的数据范围就有所差异。我们可以用sizeof操作符去查看。
sizeof 是⼀个关键字,也是操作符,专门是用来计算sizeof操作符数的类型长度的,单位是字节。
2、变量
创建变量的语法形式:
data_type name;
| |
| |
数据类型 变量名
int age = 18;//整型变量,初始化为18
char ch = 'a';//字符变量,初始化为a
double pi = 3.14;//浮点型变量,初始化为3.14
变量的分类:
- 全局变量:在大括号外部定义的变量就是全局变量,全局变量的使用范围更广,整个⼯程中想使用,都是有办法使用的。
- 局部变量:在大括号内部定义的变量就是局部变量,局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的。
当全局变量与局部变量同名时,局部变量优先。
3、算术操作符:+、-、*、/、%
算数操作符和我们数学中的加减乘除一样,都是用于计算使用的。不过要注意乘除符号,“*”是乘号,“/”是除号。
此外还有一个“%”,这是取余(取模)操作符。运算符 % 表示求模运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。
对于除法操作符“/”
要注意的问题
- 除号的两端如果是整数,执行的是整数除法,得到的结果也是整数。
- 如果希望得到浮点数的结果,两个运算数必须至少有⼀个浮点数,这时 C 语言就会进行浮点数除法。
#include <stdio.h> int main() { printf("%d\n", 6 / 3);//结果为2 printf("%f\n", 6 / 3.0);//结果为2.000000 return 0; }
对于取余操作符“%”
要注意的问题
- 这个运算符只能用于整数,不能用于浮点数。
- 负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定。
#include <stdio.h>
int main()
{
printf("%d\n", 11 % -5);//结果为 1
printf("%d\n",-11 % -5);//结果为 -1
printf("%d\n",-11 % 5); // 结果为 -1
return 0;
}
4、赋值操作符
“=”为赋值操作符,就是给定义的变量赋值
int age = 18;//赋值为 18
char ch = 'a';//赋值为 a
double pi = 3.14;//赋值为 3.14
注意
赋值操作符只有一个等号,还有一个经常混淆的操作符 “==”,它是有两个等号组成的,用于比较两个操作数是否相等。
#include<stdio.h>
int main()
{
int a = 1;//一个等号,是赋值
int b = 2;
if(a == b)//两个等号,是比较是否相等
{
printf("a与b相等!");//如果相等,则打印这句话。
}
return 0;
}
5、单目操作符:++、--
++是⼀种自增的操作符,又分为前置++和后置++。
b = ++a 等价于 b = a + 1
如果a为5,则b为6,a也为6
b = a ++ 等价于 b = a; a = a + 1;
如果a为5,则b为5,a为6
另外还有自减的操作符,也分为前置- -和后置- -,和自增的方式是一样的。
6、强制类型转换
如果不需要强制类型转化就能实现代码,这样自然更好的。
虽说,强扭的瓜不甜,但有时候为了能让程序顺利运行,我们不得已要去使用强制类型。
7、关键字
C语言中有一批保留的名字的符号,比如:int、if、return,这些符号被称为保留字或关键字。其实简单点理解,关键字就相当于一个个的商标名字,有一部分已经被抢先注册的,那别人注册了就有了使用权,别人就可以确定这个商标使用在什么样的场景,别人只能承认。
因此要注意:
- 关键字都有特殊的意义,是保留给C语言使用的
- 程序员自己在创建标识符的时候是不能和关键字重复的
- 关键字也是不能自己创建的。
常见的关键字有:
auto break case char const continue default do double else enum extern
float for goto if int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while
8、字符和ASCII编码
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,后来美国国家标准学会(ANSI)出台了⼀个标准 ASCII 编码,统一规定了上述常用符号用哪些二进制数来表示。
初看这张表是不是以为要把它背出来?其实我们不需要记住所有的ASCII码表中的数字,使用时查看就可以了,即使考试时无法查看,也可以用下面方法在编译器上打印出来。
9、字符串和\0
字符串顾名思义就是由多个字符组成的一串,定义是要使用双引号括起来。例如"abcdef"就是一个字符串,打印格式为%s
。要注意字符串末尾隐藏着一个\0
,这个\0
是字符串结束的标志。
为了更清楚的了解结束标志\0的作用,我们在其中插入\0,看编译器的运行情况
10、转义字符
转义字符顾名思义:转变原来的意思的字符。
例如:\n
就是一个转义字符表示换行的意思,我们可以简单的理解为 \
让 n
的意思发生了转变, n
本来是⼀个普通的字符,被 \
转义换行的意思。
一些常见的转义字符还有如下:
- \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
- \b :退格键,光标回退⼀个字符,但不删除字符。
- \f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于 \v 。
- \n :换⾏符。
- \r :回⻋符,光标移到同⼀⾏的开头。
- \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数。
- \v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。
- \ddd :d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X
- \xdd :d d表⽰2个⼗六进制数字。 如: \x30 表⽰字符0
- \0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其
ASCII码值是0.
11、注释是什么?为什么写注释?
C语言的注释方式有两种
- /**/
- //
单行注释
/*注释内容*/
或
//注释内容
---------------------------------------------
多行注释
/*
注释内容
注释内容
*/
或
//注释内容
//注释内容
实例分析:
#include<stdio.h>
int main()
{
int a = 1;//定义一个整型变量a,并赋值为1
int b = 2;//定义一个整型变量b,并赋值为2
printf("%d\n",a+b);
/*
%d表示打印整型,\n表示换行
printf则是为了在控制台上打印出a+b的值
*/
return 0;
}
对于注释,可能很多人会有疑问,为什么要这么麻烦去写注释?写了注释会增加程序运行的负担吗?其实大可不必有这些顾虑因为我们写的注释在预处理器阶段前就被移除了,我们写的注释,编译器压根就不知道。注释是为了方便程序员们更高效地开发程序,自己写的程序的功能要告诉别人,同时别人写的程序自己也能看懂。即使是自己写的代码,可能过了一段时间后,如果没有注释也会看不懂当时的思路是怎么样的。所以写注释不仅方便别人,也方便自己,平时写代码时要养成写注释的习惯。
最后
本文是根据本人学习总结的一些C语言的基础知识,文中如有错误,希望告知我,好让我改正。如有问题,可以一起讨论学习!