目录
1.用“hello world”打开新世界的大门
2.基本数据类型
3.变量与常量
3.1变量
3.2变量的使用
3.3变量的作用域和生命周期
3.3.1作用域
3.3.2生命周期
3.4常量
3.4.1字面常量
3.4.2 const修饰的常变量
3.4.3 #define 定义的标识符常量
3.4.4 枚举常量
4.字符串
4.1 字符串
4.2 常量字符串
5.转义字符
6.注释
总结
相信很多小伙伴在学习编程语言的过程中,不管是什么语言,接触到的第一个代码一定会是“hello world”,在C语言的学习过程中也不例外。下面我们来看看这个代码:
#include
int main()
{
printf("hello world\n");
return 0;
}
值得注意的是:在C语言中,main函数是一个程序的入口(ps:一个工程中有且仅有一个main函数),一个完整的程序必须有主函数;如果没有,程序将无法运行。main函数的返回类型一般为int,且返回值为0。主函数的主体如下:
int main()
{
//函数中要实现的内容
return 0;
}
#include
在C语言中,仅有4种基本数据类型——整型、浮点型、指针和聚合类型(如数组和结构等)。
整型和浮点型如下:
char //字符型
short //短整型
int //整型
long //长整型
long long //更长的整型
float //单精度浮点数
double //双精度浮点数
注意:设计char类型变量的目的是为了让他们储存字符型值。
值得一提的是,C语言的数据类型中之所以没有字符串类型,是因为C语言可以通过字符数组的形式来存储字符串。
我们可以通过关键字 sizeof 来计算各种数据类型的大小:
ps:关键字 sizeof是计算变量所占空间大小的关键字,单位是字节。
看到这里可能有人就要问了:为什么 long 和 int 计算出来的大小一样啊?那是因为C语言中规定长整型的大小至少应该和整型一样,在不同的编译器中long的大小可能不同。
正因为C语言中有这么多的数据类型并且各种类型的大小不同,更加丰富地表达了生活中的各种值。
变量分为全局变量和局部变量
下面我们来看一下全局变量和局部变量的区别:
小结:简单来讲,最大花括号外(可以理解为主函数和其他函数外)定义的变量为全局变量;花括号内定义的变量为局部变量。
当局部变量与全局变量重名的时候,局部变量优先。
ps:当我们在使用变量的时候,最好将变量初始化,如果我们不初始化,这个变量内存的就是一个随机值。
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
1.局部变量的作用域就是变量所在的局部范围。当出了这个范围后,再次使用就会报错(未定义的标识符)
2.全局变量的作用域为整个工程(不管是否在同一个源文件,当定义的全局变量不在同一个源文件时,只需要加上extern这个关键字就能使用该全局变量)。
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
2. 全局变量的生命周期是:整个程序的生命周期。
C语言中的常量分为以下以下几种
int main()
{
//字面常量演示
6.66 //字面常量
6000 //字面常量
return 0;
}
当一个变量被const修饰后,他就具有了常属性。不能直接修改他的值。
但如果仍想要修改,可以通过指针来进行修改。
尽管当变量被const修饰后具有了常属性,但他的本质还是一个变量!!
如图,在定义数组时,[ ]内的值必须是一个常量,尽管p具有了常属性,但他仍然时一个变量。
通过arr数组的定义我们就可以发现,MAX实际上是一个常量。define关键字定义的常量会在预处理阶段将所有的MAX替换为1000。
枚举类型是指他的值为符号常量而不是字面值的类型。它们以下面这种形式声明:
enum sex
{
male //如果不特意声明的话,male的值为0,后面的依次加1
female
secret
}
此时male为0,female为1,secret为2。
如果将female赋值为20,那么male为0,secret为21。
"hello world\n"
这种由双引号引起来的一串字符称为字符串字面值或者简称字符串。
ps:字符串的结束标志是 \0 的转义字符,在计算字符串长度的时候遇到 \0 就结束,不算作字符串内容。尽管字符串中的 \0 转义字符不计入字符串长度,但仍要占用空间。
arr1中有6个字符,所以在计算出的长度为6,一个字符所占的空间为一个字节,而arr1计算出的为7个字节,刚好印证了上面所说的 ' \0 ' 也要占用空间。
arr2中只有3个字符,但是没有包含 ' \0 ',所以求出来的字符串是一个随机值。
在字符串常量的储存形式中,所有的字符和 '\0' 都储存于内存的某个位置。
字符串常量一般和指针放在一起讨论,因为在程序中使用字符串常量会生成一个“指向字符的常量指针”。当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所储存的地址,而不是这些字符本身。因此,可以把字符串常量赋值给一个“指向字符的指针”,后者指向这些字符所储存的地址。但是,不能将字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。
char * message = "hello world! ";
这条语句把message声明为一个指向字符的指针,并用字符串常量中第一个字符的地址对该指针进行初始化。
当我们要在屏幕上打印一个目录为 "c:\code\test.c\n" 时,
我们应该怎样写代码?下面这个代码对吗?
我们可以看到,打印出来的结果与我们想要的结果似乎有点出入。那是为什么呢?
原来,这时因为C语言中存在转义字符的原因。下面我们就来看看C语言中有哪些转义字符:
转义字符 | 释义 |
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\' | 用于表示字符常量 ' |
\“ | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制数字。 如 \130 通过ASCLL转义为 X |
\xdd | dd表示2个十六进制数字。 如: \x30 0 |
注释的原因:
1. 代码中有不需要的代码可以直接删除,也可以注释掉
2. 代码中有些代码比较难懂,可以加一下注释文字
C语言风格的注释 /*xxxxxxxx*/
缺陷:不能嵌套注释
C++风格的注释 //xxxxxxxx
可以注释一行也可以注释多行
以上就是关于部分C语言基础知识的内容了,希望能够帮到大家,如果有什么写得不好的地方也希望各位指正一二。