C语言:初识入门篇
专栏说明:本专栏用于C语言学习,文章中出现的代码由C语言实现,如对你学习有所帮助,可以点赞收藏关注,感谢三连。
- 博客主页:Duck Bro 博客主页
- 系列专栏:C语言专栏
- 关注博主,后期持续更新系列文章
- 如果有错误感谢请大家批评指出,及时修改
- 感谢大家点赞👍收藏⭐评论✍
C语言:初识入门篇
目录
- C语言:初识入门篇
- 1. C语言是什么
- 2. 编写一个C语言程序
- 3. 数据类型
- 3.1 常见的数据类型
- 3.2 数据类型的大小(内存大小)
- 3.3 类型的使用
- 4. 变量、常量
- 4.1 定义变量
- 4.2 变量的分类(局部、全局)
- 4.3 变量的作用域和生命周期
- 4.4 常量
- 5. 字符串
- 6. 转义字符
- 7. 注释
- 8. 分支语句
- 9. 循环语句
- 10. 函数
- 11. 数组
- 11.1 数组定义
- 11.2 数组下标
- 11.3 数组使用
- 12. 操作符
- 13. 关键字
- 14. #define定义宏
- 15. 指针
- 16. 结构体
1. C语言是什么
C语言是一种通用的高级编程语言,由AT&T贝尔实验室的Dennis Ritchie于1972年开发。C语言具有简单、高效、可移植性强等特点,广泛应用于系统软件、嵌入式系统和游戏开发等领域。
C语言在编程界具有广泛的影响力,很多其他编程语言都受到了C语言的影响,如C++、Java、C#等。许多操作系统和应用程序都是用C语言开发的,因此学习和掌握C语言对于编程人员来说是非常重要的。
2. 编写一个C语言程序
//代码在VS2019编译器上编写
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{printf("hello world");printf("Duck Bro");printf("CSDN");return 0;
}
3. 数据类型
3.1 常见的数据类型
char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数
3.2 数据类型的大小(内存大小)
#include <stdio.h>
int main()
{printf("char: %d\n", sizeof(char));printf("short: %d\n", sizeof(short));printf("int: %d\n", sizeof(int));printf("long: %d\n", sizeof(long));printf("long long: %d\n", sizeof(long long));printf("float: %d\n", sizeof(float));printf("double: %d\n", sizeof(double));printf("long double: %d\n", sizeof(long double));return 0;
}
3.3 类型的使用
int main()
{char name = "Duck Bro"; //昵称int year = 2; //码龄int weight = 57; //体重int height = 178; //身高return 0;
}
4. 变量、常量
不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。
4.1 定义变量
char name = "Duck Bro"; //昵称int year = 2; //码龄int weight = 57; //体重int height = 178; //身高
4.2 变量的分类(局部、全局)
- 局部变量
- 全局变量
#include<stdio.h>
int c = 100;//全局变量
int main()
{int a = 0;//局部变量int b = 1;//局部变量int c = 200;//局部变量printf("a=%d\n", a);printf("b=%d\n", b);printf("c=%d\n", c);return 0;
}
当局部变量和全局变量同名的时候,局部变量优先使用
4.3 变量的作用域和生命周期
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
4.4 常量
常量的几种形式
- 字面常量
- const 修饰的常变量
- #define 定义的标识符常量
- 枚举常量
#include<stdio.h>
//枚举
enum Sex
{MALE,FEMALE,SECRET
};
int main()
{//字面常量13;100;//const修饰常变量const int a = 1000;//a = 1000; 不能进行修改printf("a=%d\n", a);//#define标识符常量#define MAX 100printf("MAX=%d\n", MAX);//枚举常量printf("male=%d\n", MALE);printf("female=%d\n", FEMALE);printf("secret=%d\n", SECRET);return 0;
}
5. 字符串
由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
"hello world \n"
注:字符串的结束标志是一个
\0
的转义字符。在计算字符串长度的时候\0
是结束标志,不算作字符串内容。
示例代码
#include <stdio.h>
int main()
{char arr1[] = "Duck";//默认结束标志\0char arr2[] = { 'D', 'u', 'c','k'};//没有结束标志char arr3[] = { 'D', 'u', 'c','k', '\0' };//有结束标志printf("%s\n", arr1);printf("%s\n", arr2);printf("%s\n", arr3);return 0;
}
6. 转义字符
常见的转义字符
转移字符 | 释义 |
---|---|
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\' | 用于表示字符常量’ |
\“ | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。 如: \130 X |
\xdd | dd表示2个十六进制数字。 如: \x30 0 |
示例代码
#include <stdio.h>
int main()
{//printf("c:\code\test.c\n");printf("c:\\code\\test.c\\\n");//打印地址printf("\'\n");//打印单引号printf("\"\n");//打印双引号return 0;
}
7. 注释
注释是在程序中用来解释代码的文本。它们通常在代码中以特定的格式放置,被编译器或解释器忽略,不会对程序的执行产生任何影响。
注释可以用来提供关于代码功能、目的、参数、变量等方面的信息,使其他人能够更好地理解和维护代码。注释还可以用于调试代码,帮助程序员找出错误和改进代码。
注释有两种风格:
C语言风格的注释,缺陷不能嵌套注释
/*xxxxxx*/
C++风格的注释,可以注释一行也可以注释多行
//xxxxxxxx
8. 分支语句
- if
- else
#include<stdio.h>
int main()
{int year = 0;printf("请输入年龄:");scanf("%d", &year);if (year < 2){printf("完成不了");}else {printf("成功完成");}return 0;
}
9. 循环语句
- while
- for
- do…while
#include<stdio.h>
int main()
{int num = 0;//while循环while(num<=10){printf("%d ", num);num++;}printf("\n");//for循环int i = 0;for (i = 0; i <= 10; i++){printf("%d ", i);}return 0;
}
10. 函数
函数是一段完成特定任务的代码块,可以在程序中多次调用。函数的特点就是简化代码,代码复用。
//以下代码是num3=num1+num2
#include<stdio.h>
int main()
{int num1 = 0;int num2 = 0;int num3 = 0;num1 = 2;num2 = 3;num3 = num1 + num2;printf("%d\n", num3);return 0;
}
//以下代码是使用函数Add代替输入进行加法运算
#include<stdio.h>
int Add(int x, int y)
{return x + y;
}
int main()
{int num1 = 0;int num2 = 0;int num3 = 0;num1 = 2;num2 = 3;num3 = num1 + num2;printf("%d\n", num3);printf("%d\n",Add(3, 4));return 0;
}
11. 数组
11.1 数组定义
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
11.2 数组下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问的。
11.3 数组使用
#include<stdio.h>
int main()
{int i = 0;//定义一个数组int arr1[10] = {1,2,3,4,5,6,7,8,9,10};//使用for循环,遍历数组for (i = 0; i < 10; i++){//从数组下标0开始输出printf("%d ", arr1[i]);}return 0;
}
12. 操作符
算术操作符
+ 加法
- 减法
* 乘法
/ 除法
% 取模
移位操作符
>> 右移
<< 左移
位操作符
& 与
| 或
^ 异或
赋值操作符
= 赋值
+= 加等
-= 减等
*= 乘等
/= 除等
&= 与等
^= 异或等
|= 或等
>>= 右移位等
<<= 左移位等
单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
关系操作符
> 大于
>= 大于等于
< 小于
<= 小于等于
!= 不相等
== 相等
逻辑操作符
&& 逻辑与
|| 逻辑或
条件操作符
exp1 ? exp2 : exp3 如果exp1满足,则输出exp2;不满足,则输出exp3
逗号表达式
exp1, exp2, exp3, …expN 依次进行运算,结果输出最后一个表达式
下标引用、函数调用和结构成员
[] 下标引用
() 函数调用
. -> 结构体成员
13. 关键字
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
14. #define定义宏
//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{int sum = ADD(2, 3);printf("sum = %d\n", sum);sum = 10*ADD(2, 3);printf("sum = %d\n", sum);return 0;
}
15. 指针
指针是C语言中一种特殊类型的变量,它可以存储内存地址。每个变量在内存中都有一个地址,指针可以用来存储这个地址,从而可以通过指针来访问或修改对应地址上的数据。
通过指针,我们可以动态地分配和释放内存,以及在程序中传递和修改复杂的数据结构。
在C语言中,可以通过使用"*"运算符来声明一个指针变量,如:
int *ptr;
这样就声明了一个名为ptr的指针变量,可以存储int类型变量的地址。可以使用"&"运算符来获取一个变量的地址,如:
int num = 10;
int *ptr = #
这样就将变量num的地址赋值给了指针变量ptr。
指针变量也可以通过解引用运算符"*"来访问或修改对应地址上的数据,如:
*ptr = 20;
这样就将20赋值给了ptr所指向的地址上的数据。
使用指针可以方便地进行内存操作和数据传递,但同时也需要注意指针的合法性和安全性,避免出现悬空指针和野指针的问题。
16. 结构体
在C语言中,结构体是一种用户自定义的数据类型,它可以存储不同类型的数据项。结构体由多个数据成员组成,每个数据成员可以是任意C语言数据类型,包括基本数据类型和其他结构体类型。
结构体的定义使用关键字struct,结构体的数据成员使用逗号分隔。结构体定义的一般形式如下:
struct 结构体名
{数据类型 成员名1;数据类型 成员名2;// ...
};
定义一个学生结构体,它包含学生的姓名、年龄和成绩:
struct Student
{char name[50];int age;float score;
};
结构体的初始化
#include<stdio.h>
struct Student
{char name[50];int age;int score;
};
int main()
{struct Student s = { "Duck Bro",20,99 };printf("name = %s age = %d score = %d\n", s.name, s.age, s.score);return 0;
}