【C语言必备基础知识 1】(超详细)

目录

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.注释

总结


1.用“hello world”打开新世界的大门

相信很多小伙伴在学习编程语言的过程中,不管是什么语言,接触到的第一个代码一定会是“hello world”,在C语言的学习过程中也不例外。下面我们来看看这个代码:

#include 
int main()
{
    printf("hello world\n");
    return 0;
}
值得注意的是:在C语言中,main函数是一个程序的入口(ps:一个工程中有且仅有一个main函数),一个完整的程序必须有主函数;如果没有,程序将无法运行。main函数的返回类型一般为int,且返回值为0。主函数的主体如下:
int main()
{
    //函数中要实现的内容

    return 0;
}

#include 的目的是为了让我们可以访问标准I/O库中的函数(例如scanf 和 printf) , 这组函数用于执行输入和输出。

2.基本数据类型

在C语言中,仅有4种基本数据类型——整型、浮点型、指针和聚合类型(如数组和结构等)。

整型和浮点型如下:

char       //字符型
short      //短整型
int        //整型
long       //长整型
long long  //更长的整型
float      //单精度浮点数
double     //双精度浮点数

注意:设计char类型变量的目的是为了让他们储存字符型值。

值得一提的是,C语言的数据类型中之所以没有字符串类型,是因为C语言可以通过字符数组的形式来存储字符串。

我们可以通过关键字 sizeof 来计算各种数据类型的大小:

ps:关键字 sizeof是计算变量所占空间大小的关键字,单位是字节。

【C语言必备基础知识 1】(超详细)_第1张图片

看到这里可能有人就要问了:为什么 long 和 int 计算出来的大小一样啊?那是因为C语言中规定长整型的大小至少应该和整型一样,在不同的编译器中long的大小可能不同。

 正因为C语言中有这么多的数据类型并且各种类型的大小不同,更加丰富地表达了生活中的各种值。

3.变量与常量

3.1变量

变量分为全局变量和局部变量

下面我们来看一下全局变量和局部变量的区别:

【C语言必备基础知识 1】(超详细)_第2张图片

 小结:简单来讲,最大花括号外(可以理解为主函数和其他函数外)定义的变量为全局变量;花括号内定义的变量为局部变量。

当局部变量与全局变量重名的时候,局部变量优先。

 3.2变量的使用

【C语言必备基础知识 1】(超详细)_第3张图片

  ps:当我们在使用变量的时候,最好将变量初始化,如果我们不初始化,这个变量内存的就是一个随机值。

 3.3变量的作用域和生命周期

3.3.1作用域

作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的,而限定这个名字的可用性的代码范围就是这个名字的作用域

1.局部变量的作用域就是变量所在的局部范围。当出了这个范围后,再次使用就会报错(未定义的标识符)

【C语言必备基础知识 1】(超详细)_第4张图片

  2.全局变量的作用域为整个工程(不管是否在同一个源文件,当定义的全局变量不在同一个源文件时,只需要加上extern这个关键字就能使用该全局变量)。

【C语言必备基础知识 1】(超详细)_第5张图片

  3.3.2生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

2. 全局变量的生命周期是:整个程序的生命周期。

3.4常量

C语言中的常量分为以下以下几种

3.4.1字面常量

int main()
{
    //字面常量演示
    6.66 //字面常量
    6000 //字面常量
    return 0;
}

3.4.2 const修饰的常变量

当一个变量被const修饰后,他就具有了常属性。不能直接修改他的值。

【C语言必备基础知识 1】(超详细)_第6张图片

 但如果仍想要修改,可以通过指针来进行修改。

【C语言必备基础知识 1】(超详细)_第7张图片

  尽管当变量被const修饰后具有了常属性,但他的本质还是一个变量!!

【C语言必备基础知识 1】(超详细)_第8张图片

 如图,在定义数组时,[ ]内的值必须是一个常量,尽管p具有了常属性,但他仍然时一个变量。

 3.4.3 #define 定义的标识符常量

【C语言必备基础知识 1】(超详细)_第9张图片

 通过arr数组的定义我们就可以发现,MAX实际上是一个常量。define关键字定义的常量会在预处理阶段将所有的MAX替换为1000。

 3.4.4 枚举常量

枚举类型是指他的值为符号常量而不是字面值的类型。它们以下面这种形式声明:

enum sex
{
    male     //如果不特意声明的话,male的值为0,后面的依次加1
    female
    secret
}

此时male为0,female为1,secret为2。

如果将female赋值为20,那么male为0,secret为21。

4.字符串

4.1 字符串

"hello world\n" 

这种由双引号引起来的一串字符称为字符串字面值或者简称字符串

ps:字符串的结束标志是 \0 的转义字符,在计算字符串长度的时候遇到  \0  就结束,不算作字符串内容。尽管字符串中的 \0 转义字符不计入字符串长度,但仍要占用空间。

【C语言必备基础知识 1】(超详细)_第10张图片

 arr1中有6个字符,所以在计算出的长度为6,一个字符所占的空间为一个字节,而arr1计算出的为7个字节,刚好印证了上面所说的 ' \0 ' 也要占用空间。

arr2中只有3个字符,但是没有包含 ' \0 ',所以求出来的字符串是一个随机值。

4.2 常量字符串

在字符串常量的储存形式中,所有的字符和 '\0' 都储存于内存的某个位置。

字符串常量一般和指针放在一起讨论,因为在程序中使用字符串常量会生成一个“指向字符的常量指针”。当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所储存的地址,而不是这些字符本身。因此,可以把字符串常量赋值给一个“指向字符的指针”,后者指向这些字符所储存的地址。但是,不能将字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。

char    * message = "hello world! ";

这条语句把message声明为一个指向字符的指针,并用字符串常量中第一个字符的地址对该指针进行初始化。 

5.转义字符

当我们要在屏幕上打印一个目录为   "c:\code\test.c\n"  时,

我们应该怎样写代码?下面这个代码对吗?

【C语言必备基础知识 1】(超详细)_第11张图片

 我们可以看到,打印出来的结果与我们想要的结果似乎有点出入。那是为什么呢?

原来,这时因为C语言中存在转义字符的原因。下面我们就来看看C语言中有哪些转义字符:

转义字符 释义
\? 在书写连续多个问号时使用,防止他们被解析成三字母词
\' 用于表示字符常量  '
\“ 用于表示一个字符串内部的双引号
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd

ddd表示1~3个八进制数字。  如  \130 通过ASCLL转义为 X

\xdd dd表示2个十六进制数字。    如: \x30   0

6.注释

注释的原因:

1. 代码中有不需要的代码可以直接删除,也可以注释掉

2. 代码中有些代码比较难懂,可以加一下注释文字

 【C语言必备基础知识 1】(超详细)_第12张图片

C语言风格的注释   /*xxxxxxxx*/

缺陷:不能嵌套注释

C++风格的注释 //xxxxxxxx

可以注释一行也可以注释多行

总结

以上就是关于部分C语言基础知识的内容了,希望能够帮到大家,如果有什么写得不好的地方也希望各位指正一二。

你可能感兴趣的:(c语言,c++,开发语言)