初识C语言之一:秃头之路的开始
Posted Echoyaho
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识C语言之一:秃头之路的开始相关的知识,希望对你有一定的参考价值。
初识C语言之一:秃头之路的开始
目录:
前言:
因为上次已经自我介绍过了,所以在这里就不多赘述了。这是小白的第二篇博客,也是第一篇技术博客,本篇呢,旨在让大家对C语言有一个简单的了解,不过这个了解呢仅限于,知道里面有哪些语法呀,有什么关键词呀,简单的使用呀之类的,不会太过深入的讲解,只是让大家能有一个映像。还有就是,因为小白的实力有限,所以如果哪里讲的不对请各位dalao多多指正!(respect!.jpg)
一、第一个C语言程序
#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
首先呢,这是一段简单的C语言代码,但这也是走上程序员这条路上之后向世界打的第一个招呼,所以让我们来了解一下这个程序的组成吧!
#include <stdio.h> //包含一个<stdio.h>头文件,可以使用头文件里有的函数 int main() //创建主函数,每个C语言程序都有且只有一个主函数 { printf("Hello World!"); //调用<stdio.h>里面的'printf'函数来输出"Hello World!" return 0; //函数的返回值为0 }
然后解释一下里面每个步骤的具体意义~(可能描述的不太准确,欢迎各位大佬补充!)
Q1:#include <stdio.h>这样做的意义是什么呢?
A1:主要的作用是让我们可以使用被包含文件中的函数。因为C语言拥有庞大的C语言标准库,这个标准库里面包含有一组C内置函数、常量和头文件。而头文件(#include包含的后缀名为.h的文件)呢,里面大多是我们常用到的一些函数,我们把它叫做库函数,因为这是已经写好了的,所以我们直接调用就可以。用起来超级方便,不用自己去写。像<stdio.h>这个头文件里面就是包含的标准输入输出函数,第4行里的"printf()",就是这个库里面的一个输出函数。这样的头文件还有很多,都包含着我们常用的一些功能的函数,例如<ctype.h>,<stdlib.h>…等等。而且#include还是一条预处理指令,至于预处理则是为方便编译器处理而设置的一种机制,包括一些常用预处理器和语句,我们统称为预处理系统。关于预处理我在这里不做太多解释,后面会讲的,现在只是简单的了解一下~。
Q2:int main()在代码中有什么作用呢,为什么要这样写呢?
A2:int main()的作用,是在程序中创建一个主控函数,它是程序执行的起点,但是程序中如果有其他函数的话,就要先完成对其他函数的调用,然后再返回到主函数,最后用main()这个函数结束整个程序。至于为什么要这么写。其实还有另外一种写法:
#include <stdio.h> void main() //void 类型的函数没有返回值 { }
但是这种方法已经过时了,现在基本上已经不用了。所以我是这样的另一种写法写的~
注意!:一个C语言程序,有且只有一个main()函数!!!!,如果有多个,编译器可能不会报错,但是程序运行起来肯定有问题(一般来说编译器是会报错的吧!)
Q3:printf(“Hello World!”);是什么意思呢?
A3:这行代码的意思是调用函数输出“Hello Wrold!",而这个函数因为是<stdio.h>里面的库函数,所以不用自己声明,如果是自己写的函数的话,则要在主函数前进行声明,声明的格式是
返回值类型 函数名称 (形参);
至于函数怎么定义的话,后面会详细说说的。
Q4:return 0; 的作用是什么?
A4:return是 C语言中的一个关键字,它的作用是指定函数得返回值,什么是返回值呢?,它是程序达到一定条件或者程序运行完毕之后返回的一个值,这个值可以用变量来接收,然后使用这个值的(至于什么是变量接下来就会讲),但是不是所有函数都有返回值,如果定义函数的时候指定函数的返回值类型为void 那么这个函数里面就不用return 关键词,也就没有返回值了。
二、数据类型
这里我用思维导图的方式,把C语言中的数据类型给列出来了,但是像自定义和无符号型哪些我就没有列出了,自定义的数据类型,后面会详细再讲的。
在这里我一共列出了8种数据类型,为什么C语言中要有这么多数据类型呢?
存在这么多数据类型是为了更加丰富的表达生活中的各种值。并且各种类型的值的最大、最小值以及在占用存储空间的大小上也各有不同,这样可以使程序员更加灵活的操纵存储空间。
Char | int | long | long long | short | float | double | long double |
---|---|---|---|---|---|---|---|
1Byte | 4Byte | 8Byte | 8Byte | 2/4Byte | 4Byte | 8Byte | 16Byte |
看到这里,我就要说一下C语言中的几条规则了:
- short、long类型的长度不确定,在不同的主机(编译器)上有不同的大小,但是要遵循short类型不能比int大,可以和int相等(short最小是2字节),long不能比int小(long最小是4字节)。
- int类型的大小通常和机器的物理字长相同,通常是2字节或者4字节,根据硬件的不同自由确定。
- char类型一般是1个字节,但是ANSI(美国国家标准学会)里没有硬性的规定它的长度,某些嵌入式编译器可能是2个字节。
讲到这里,C语言中基本的数据类型就讲完了,接下来我们就来学习一下怎样使用这些数据类型(定义变量和常量)。
三、常量和变量
在我们的日常生活中有些值是不能变的,比如身份证号码、血型、圆周率…等等,但是有些值是可变的比如年龄、工资、体重…
这些值,在C语言中用常量和变量表示,不变的量就是常量,能变的量就是变量。
首先,我们来看定义变量的方法:
#include <stdio.h>
int main()
{
int i=10; //定义一个int类型的变量
char ch="A"; //定义char类型的变量
float weight="99.5"; //定义float类型的变量
return 0;
}
上面这一段代码就定义了三个变量,分别是int类型、char类型、float类型的变量,其他类型的变量也是这样定义的,很简单~
然后我们来看看变量的分类:
变量分为两类:
局部变量:
局部变量就是只能在函数内部使用的变量,调用函数时创建,调用结束后销毁的变量。这里还是涉及到一个函数的作用域和声明周期的概念,我们待会儿再讲。
- 全局变量:
全局变量就和局部变量不一样,它可以再整个项目中使用,而不是被限制在某个函数中,意思就是在同一个项目的不同文件中,都可以使用其他文件中定义的全局变量。
接下来我用一段代码来说明一下全局变量和局部变量:
#include <stdio.h>
int global=0; //定义一个全局变量
int main()
{
int local=1; //定义一个局部变量
int global=2; //局部变量
return 0;
}
在这段代码里,有两个局部变量和一个全局变量,但是有一个局部变量和全局变量相等,这时候我们是使用全局变量还是局部变量呢?
当全局变量和局部变量冲突时,优先使用的是局部变量!
刚刚提到了变量的作用域和生命周期,在这里我就简单的解释一下!
首先说作用域:
之所以有局部变量和全局变量之分,就是因为他们的作用域不一样。作用域嘛,就是变量作用的范围,也可以理解成能够使用该变量的范围,就是该变量的作用域。局部变量的作用域一般就是该变量所在的函数内部,而全局变量的作用域呢就是整个工程。
然后生命周期:
生命周期就是创建变量到销毁变量之间的时间段。
局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。换句话说就是函数开始,局部变量的生命周期开始,函数结束,局部变量的生命周期结束。
全局变量的生命周期:就是整个程序的生命周期,程序开始全局变量的生命周期开始,程序结束全局变量的生命周期结束。
说完变量了,接下来就该说常量了!
在C语言中常量分为以下几种:
- 字面常量
- 关键字const修饰的常变量
- #define定义的标识符常量
- 枚举常量
接下来我用代码演示以下各种常量的创建:
#include <stdio.h>
#define MAX 114514
//MAX 是标识符常量
enum color
{
RED,
GREEN,
BLUE
};
//方括号中的RED、GREEN、BLUE都是枚举常量`在这里插入代码片`
int main()
{
100; //是字面常量
const int i=100; //是用const修饰的常量
return 0;
}
在C语言中定义常量和变量的方式略有不同,从定义常量和定义变量的代码中可以看出,我就不再一一解释了~
然后在这里讲一些关于常量的注意事项:
c语言中的常量是不能作为左值的,也就是常量不允许修改
#define是C语言中的一个宏定义命令(和include一样也是一个预处理指令),它用来将标识符定义为其后的常量。
enum
是定义枚举的关键字,现在我们只需要知道它是用来定义枚举常量的,就可以了,并且enum
关键字定义的枚举常量的值是默认是从1开始的,后面的依次是前一个变量+1,但是枚举常量我们是可以自己在枚举里赋值的,注意是在枚举里面赋值,而不是在外面对枚举常量进行修改。我用一段代码来演示一下。#include <stdio.h> enum color { RED, GREEN, BLUE }; //这里面的枚举常量RED=1,GREEN=2,BLUE=3,这是默认的值,但是我们可以进行修改 enum sex { MALE, FEMALE=10, SECRET } //这里面的枚举常量MALE=1,FEMALE=10,SECRET=11。 int main() { printf("RED=%d\\tGREEN=%d\\t\\tBLUE=%d\\t\\n\\nMALE=%d\\tFEMALE=%d\\tSECRET=%d\\n", RED, GREEN, BLUE, MALE, FEMALE, SECRET); return 0; }
我再展示一下这段代码的运行结果:
相信看到这里你对常量和变量应该有一定的了解了,因为这是初识C语言,我们也就不再进行更深层的学习了,如果有兴趣大家可以自行上网查阅资料学习哦~
那接下来我们就开始下一个内容:字符串!
四、字符串
相信你应该很疑惑,在讲数据类型的时候为什么没有讲到string类型,也就是字符串类型,因为,其实在其他语言里面string类型也不是它的最基本类型,只不过作为标准库提供出来方便使用,但是C语言没有这样做,所以自然就没有string类型了。但是没有string类型不代表不能实现字符串。
所以先让我们来了解一下C语言中字符串的概念:
在C语言中用双引号括起来的内容称为字符串字面量,也叫作字符串常量。双引号中的字符和编译器自动加入末尾的\\0字符,都作为字符串储存在内存中。
注:C语言中的字符串结束标志是一个’\\0’的转义字符。在计算字符串长度的时候’\\0’是结束标志,不算做字符串内容。
然后我们用代码来实现一下字符串:
#include <stdio.h>
int main()
{
char arr1[]="abc"; //双引号中的字符,编译器会自动加入字符'\\0'作为字符串结尾
char arr2[]={'a','b','c','\\0'}; //而数组则需要自己手动添加'\\0'作为结尾字符
char arr3[]={'a','b','c'};//如果数组末尾没有添加'\\0'的话,在进行字符串操作的时候就会产生
//无法预估的错误,产生这种错误的原因是因为,进行字符串操作时,
//要读到'\\0'也就是字符串结尾才会结束,如果一直读不到'\\0'
//就会一直读下去,直到读取到'\\0'为止。
return 0;
}
结语:本次的知识分享就先到这里了,谢谢各位看官的看到最后,如果各位大佬有什么建议,或者我写的博客里面哪里讲错了,敬请批评!
哥哥哥哥,姐姐姐姐,给个三连可以吗(看不见我…看不见我…)
以上是关于初识C语言之一:秃头之路的开始的主要内容,如果未能解决你的问题,请参考以下文章