初识C语言
本篇主要针对刚接触C语言(无编程基础)快速了解C语言的整体架构,对C语言有个大体了解 仅适用于入门
前言
- 有用的工具
-
一个好的编译软件(用来得心应手即可)本人使用的Visual Studio2019
-
buff加持
-
小工具
- 端正态度
- 不做伸手党,遇到问题自己先尝试解决
- 持之以恒,不在一朝一夕
- 多动手,编程并非纸上谈兵
C语言概述
什么是C语言?
第一个C语言程序
数据类型
变量、常量
字符串+转义字符+注释
选择语句
循环语句
函数
数组
操作符
常见关键字
define 定义常量和宏
指针
结构体
第一个C语言程序
#include <stdio.h> int main() { printf("hello world\n"); return 0; } //main函数是程序的入口 //一个工程中main函数有且仅有一个
数据类型
数据类型 | 解释 | 字节 |
---|---|---|
char | 字符型 | 1 |
short | 短整型 | 2 |
int | 整型 | 4 |
long | 长整型 | 4/8 |
long long | 更长的整型 | 8 |
float | 单精度浮点型 | 4 |
double | 双精度浮点型 | 8 |
注意:存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。
变量 常量
·变量顾名思义是变化的量
·常量就是不会发生改变的量
不变的值,C语言中用常量的概念来表示,变的值C语言中用变量来表示。
变量的定义方法
int number = 150;
float weight = 45.5f;
char ch = ‘m’;
//定义变量首先要有变量的类型,其次是变量名,为其输入一个数值
//即为这个变量初始化
//任何一个变量在使用之前必须要先对它进行初始化。
//不初始化的话使用它就没有实际意义了。
·在实际编程中,习惯上在定义变量的时候就对它进行初始化,这是一个很好的编程习惯。
·但是按照 C89 标准,变量的定义只能在程序或复合语句的开头。这样那么很多在开头定义但到后面才会用到的变量,在定义的时候如何对它们进行初始化呢?
·此时习惯上将它们初始化为0,然后等后面真正用到它们的时候再重新赋值。
变量的分类
- 局部变量
- 全局变量
当局部变量和全局变量可以重名
重名时局部优先
变量的作用域和生命周期
作用域
作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围。变量所在的"{}"之间,注意:不是main()函数里
- 全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
常量的分类
- 字面常量
- 就是自己输入的常量如:5,3.2
- const 修饰的常变量
- const int num =100;//此时num是常变量不能再为其赋值或修改
- #define 定义的标识符常量
- define MAX 100;//此时MAX就是100
- 枚举常量
*enum Sex
{
MALE,
FEMALE,
SECRET
};
字符串+转义字符+注释
字符串
“hello,world\n”
这种由双引号引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
char arr1[] = "hello";
char arr2[] = {'h', 'e', 'l','l','o'};
char arr3[] = {'h', 'e', 'l','l','o', '\0'};
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
hello
hello烫烫烫烫烫蘦ello
hello
C:\c语言2\bit-c-learning\12_14\Debug\12_14.exe (进程 21976)已退出,代码为 0。
按任意键关闭此窗口. . .
注:‘\0’是字符串结束的标志,“ ”有一个隐藏的"\0",arr2没有则在打印的时候会自动去找,直到找到\0为止。
转义字符
转义字符 | 释意 |
---|---|
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\’ | 用于表示字符常量’ |
\“ | 用于表示一个字符串内部的双引号 |
\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制数字,例如:\130X |
\xdd | dd表示2个16进制数字。例如:\x30 0 |
printf(“%d\n”, strlen(“c:\test\328\test.c”))
//输出结果是14
c : \t e s t \32 8 \t e s t . c
注释
- 代码中有不需要的代码可以直接删除,也可以注释掉
- 代码中有些代码比较难懂,可以加一下注释文字
- C语言风格的注释 /* xxxxxx * /
缺陷:不能嵌套注释 - C++风格的注释 //xxxxxxxx
可以注释一行也可以注释多行
选择语句
if——else语句
#include <stdio.h>
int main()
{
printf("你打算怎样学习编程?\n");
printf("每日刷题:1;每日摸鱼:0\n");
int n = 0;
while(scanf("%d", &n)!=EOF)
{
if (n == 1)
{
printf("掌握技术\n");
}
else
printf("未掌握技术\n");
}
return 0;
}
你打算怎样学习编程?
每日刷题:1;每日摸鱼:0
1
掌握技术
0
未掌握技术
循环语句
while语句
for语句
do … while语句
函数
函数就是简化代码,代码复用,与数学上的功能类似
例如:加法,在main函数外部定义一个Add函数实现加法功能,在main函数里进行调用
#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int x = 0, y = 0;
scanf("%d %d", &x, &y);
printf("%d", Add(x, y));
return 0;
}
函数要有类型,函数名,还要传入需要的参数(参数需要注明类型,参数名任意,参数有实参和形参,在main函数里传入的是实参),函数如果在main函数之后定义,需要在main函数前声明。
数组
数组是一组相同类型元素的集合
数组定义
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
//数组可以在定义时初始化,也可以利用for循环将元素一个一个存入,输出也是可以利用for循环一个个进行输出
操作符
操作符名 | 符号 |
---|---|
算术操作符 | + - * / % |
移位操作符 | >> << |
位操作符 | & ^ l |
赋值操作符 | = += -= *= /= &= ^= I= >>= <<= |
单目操作符 | ! - + & sizeof ~ - - ++ * |
关系操作符 | > >= < <= != == |
逻辑操作符 | && II |
条件操作符 | exp1 ? exp2 : exp3 |
逗号表达式 | exp1, exp2, exp3, …expN |
下标引用、函数调用和结构成员 | [] () . -> |
常见关键字
1 | 2 | 3 | 4 |
---|---|---|---|
auto | break | case | char |
const | continue | volatile | default |
do | double | else | enum |
extern | float | for | goto |
if | int | long | register |
return | short | signed | sizeof |
static | struct | switch | typedef |
union | unsigned | void | while |
在C语言中:
static是用来修饰变量和函数的
- 修饰局部变量-静态局部变量
让静态局部变量出了作用域依然存在,到程序结束,- 修饰全局变量-静态全局变量
一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。- 修饰函数-静态函数
一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用
define定义常量和宏
//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
#define MAX 100
#define ADD(x, y) ((x)+(y))
int main()
{
int sum = ADD(5, 6);
printf("%d\n", sum);
sum = MAX * ADD(5, 5);
printf("%d\n", sum);
return 0;
}
11
1000
指针
- 内存
内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地
址。
变量都有地址,取出其地址:
int main()
{
int num = 5;
#//取出num的地址
printf("%p\n", &num);//打印地址,%p--以地址的形式打印
return 0;
}
那地址如何存储,需要定义指针变量
#include <stdio.h>
int main()
{
int num = 10;
int *p = #//p为一个整形指针变量
*p = 20;
return 0;
}
- 指针大小
指针说到底就是与地址挂钩,存的指向的是地址
因此指针大小在32位平台是4个字节,64位平台是8个字节。
无论变量是什么类型,无论是整型指针还是字符型指针,在一个平台上指针的大小是不变的
结构体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。
这里只能使用结构体来描述了。
//定义结构体变量
struct Stu
{
char name[20];//名字
int age; //年龄
char sex[5]; //性别
char id[15]; //学号
};
//打印结构体信息
struct Stu s = {"大力", 20, "女", "2015070127"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);
最后的话
深入学习C语言要花费很多时间更要有决心有毅力,这篇主要是初步认识C语言,并没有深入展开,所以有些方面只是蜻蜓点水。希望这篇文章可以对刚刚接触编程的人有些帮助。