前言:🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊最近有许多小伙伴问小新有没有好用的刷题网站,想提升一下自我能力** >**经过小新缜密的思考与亲身体验,推荐超实用的**🎉【点击访问牛客网】🎉 >**里面用丰富的大厂面试真题、各类算法由易到难层层递进、专项题库应有尽有,还不快来体验体验**🎏🎏🎏
- 今天带大家重识C语言,一片文章领悟C语言精髓
- 如何学好C语言
- 1.激励自己,树立信心
- 学习不能叫苦叫累,抱怨没时间
- 3.拒绝做伸手党
- 4.学好编程,不仅仅是学好C语言
- 学习语言:
- 学习算法,数据结构
- 学习操作系统和网络
- 初识C语言
-
- **本章重点**
- 什么是C语言
- 1.第一个C语言程序:
- 2.数据类型:
- 3.变量,常量:
- 定义变量的方法
- 变量的分类
- 变量的使用
- 变量的作用域和生命周期
- 常量
- 4.字符串+转义字符+注释
- 字符串
- ASCII编码表
- 转义字符
- 注释
- 字符串
- 5.选择语句
- 6.函数
- 7.数组
- 数组定义
- 数组的使用
- 8.操作符
- 算数操作符
- 单目操作符
- 条件操作符
- 9.常见关键字
- define定义常量和宏
- 10.指针
- 变量和内存
- 定义指针变量
- 取地址
- 指针之间的赋值
- 空指针
- 坏指针
- 结构体和指针
- 指针的2个重要属性
- 数组和指针
- 函数和指针
-
前言: 大家好,我是hmm.一名大一在校生,在c/c++/java/javase等等方面有着非常浓厚的兴趣,也喜欢分享一些自己学习的心得和把自己所学的分享给大家,喜欢的可以关注收藏!
C生万物,编程之本,长远的IT职业发展的首选,C语言是母体语言,是人机交互接近底层的桥梁,学会C/C++,相当于掌握核心技术,IT行业,一般每十年就有一次变革。 40年间,在TIOBE排行榜中,C/C++位置长期占据前三,没有丝毫撼动,可谓经典永不过时!
学习不能叫苦叫累,抱怨没时间- 欲戴王冠,必承其重
- 如果你总是和别人走一样的路怎么才能保证超越别人,那就得付出不一样的努力
- 时间就像海绵里的水,挤一挤总会有的
很喜欢这样一句话,种子种下的时间最好是在十年前,其次就是现在!
别再给自己灌输毒鸡汤了,什么来不及,就要你此刻觉悟,一切就还都来得及
3.拒绝做伸手党- 遇到问题,先自己尝试解决!
必须学好:
语言、算法和数据结构、系统调用(操作系统)和计算机网络。
学习语言:选择一门好的语言,深入学习,完成所有的课后作业,多刷题巩固
学习算法,数据结构课堂以听为主,课下多练习,多刷题
学习操作系统和网络认真听讲+课后练习+主动学习 明确学校所学的知识并不能达到就业基础,必须深入学习,互联网从来不缺知识,缺少的是你去探索的心❤
首先带大家全面了解一下C语言全体系知识网络图
本章目标
基本了解C语言的基础知识,对c有一个大概的认识
本章重点- 什么是C语言
- 第一个C语言程序
- 数据类型
- 变量,常量
- 字符串+转义字符+注释
- 选择语句
- 循环语句
- 函数
- 数组
- 操作符
- 常见关键字
- define 定义常量和宏
- 指针
- 结构体
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
简介 :C语言是一门面向过程的计算机编程语言,与C++、C#、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%-20%。因此,C语言可以编写系统软件。 当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显著。 C语言拥有经过了漫长发展历史的完整的理论体系,在编程语言中具有举足轻重的地位。
1.第一个C语言程序:// 包含一个叫stdio.h的文件
//std-标准 standard input output
#include"stdio.h"
int main()//主函数-程序的入口-main函数有且只有一个
{
//这里完成任务
// 在屏幕输出helloworld
// 函数-print(打印) function- printf-打印函数
//printf("helloworld\n");
//库函数-C语言本身提供我们使用的函数
//#include
return 0;
}
/*
int 是整型的意思
main前面的int 表示main函数调用返回一个整型值
int main()
{
return 0; //返回0
}
void main() 写法已将过时
*/
2.数据类型:
char ----------字符数据类型 short ----------短整型 int---------------整型 long---------------长整型 long long — - - - – -更长的整型 float - – -- – -- – -单精度浮点数 double – -- – — -双精度浮点数
代码练习:
int main()
{
//%d-打印整型
//%c--打印字符
//%f--打印浮点数--小数
//%p--以地址的形式打印
//%x--打印16进制数据
//....
char ch = 'A';
//char-字符类型
// int --整型
// long -- 长整型
long num = 100;
printf("%d", num);
float f = 5.0;
printf("%f", f);
//short int --短整型
printf("%c\n", ch); //%c--打印字符格式的数据
int age = 20;
printf("%d", age); //%d--打印整型十进制数据
double b = 3.14;
printf("%lf\n", b);//打印双精度浮点型
return 0;
}
生活中的有些值是不变的(比如:身份证,性别,姓名等等) 有些值是改变的(如:年龄,体重,身高…)
不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示
定义变量的方法int age = 20;
float weight = 90.5f;
char ch = 'w';
变量的分类
- 局部变量
- 全局变量
#include"stdio.h"
int a = 100;//全局变量
int main()
{
//局部变量和全局变量的名字建议不要相同-易产生bug
//当局部变量和全局变量的名字相同时,局部变量优先
int a = 10;//局部变量
printf("%d\n", a);
return 0;
}
总结: 局部变量可与全局变量同名当局部变量量和全局变量同名时局部变量优先使用
变量的使用计算两个数的和:
int main()
{
//计算两个数的和
int num1 = 0;
int num2 = 0;
//输入数据-使用输入函数scanf
scanf_s("%d%d", &num1, &num2);//取地址符&
//C语言语法规定先定义再使用
int sum = num1 + num2;
printf("sum=%d\n", sum);
return 0;
}
—·
变量的作用域和生命周期
作用域
作用域(scope),程序设计理念,通常说,一段代码所用到的名字并不总是有效的/可用的 而限制这个名字的可用性的代码范围就是作用域
1.局部变量的作用域是变量所在的范围2.全局变量的作用域是整个工程
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期:整个程序的生命周期
C语言中的常量和变量的定义的形式有所差异。 C语言中的常量分为以下几种:
- 字面常量
- const 修饰的常量
- #define定义的表示符常量
- 枚举常量
#include"stdio.h"
//#define定义的标识符常量
#define MAX 10
enum Sex
{
MALE,
FEMALE,
SECRET,
};
int main()
//枚举常量
//枚举--一一列举
//例:性别,星期...
//枚举关键字: enum
//enum Sex s = MALE;
{
enum Sex s = MALE;
//const--常变量
const int n = 10;//n是变量但又有常属性,所以我们的n常变量
int arr[n] = { 0 };
//consout--修饰的常变量
//int num = 8;
const int num = 8;
printf("%d\n", num);
num = 10;
printf("%d\n", num);
return 0;
}
4.字符串+转义字符+注释
字符串
”hello bit.\n"
这种由双引号(Double Quote)引起来的一串字符称字符串字面值(String Literal),或者简称字符串。 注: 字符串的结束标志是一个\o的转义字符,在计算字符长度的时候\o是结束的标志,不算做字符串的内容
//int float
//char
//字符串类型
int main()
{
char arr1[] = "abc";//数组
char arr2[] = { 'a','b','c' };
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
int main()
{
char arr1[] = "abc";
char arr2[] = { 'a','b','c' };
printf("%d\n", strlen(arr1));//strlen---string length-计算数组长度
printf("%d\n", strlen(arr2));
//输出:3 arr2->随机值(直到遇到'\0'字符串结束)
return 0;
}
数据在计算机上储存的时候,储存的是二进制 为了存储方便,引荐ASCII编码
ASCII编码表
转变原来的意思
转义字符释义\ ?在书写连续多个问号时使用,防止他们被解析成三个字母符\ ’用于表示字符常量 ’\ "用来表示字符串内部的双引号\ \用来表示一个反斜杠,防止他被解释成一个转义序列字符\a警告字符,蜂鸣\b退格符\f进纸符\n换行\r回车\t水平制表符\v垂直制表符\dddddd表示1-3个八进制的数字。如:\130X\xdddd表示2个十六进制数字。如:\x30 0 注释- 代码中有不需要的代码可以直接删掉,也可以注释掉
- 代码中有些代码比较难懂,可以加一些注释文字
C语言风格注释/* */ 缺陷:不能嵌套注释 C++风格注释// 可以注释一行也可以注释多行
5.选择语句如果什么什么,怎么样。。。 如果什么什么,又怎么样。。。
int Add(int x, int y)
{
int z = x + y;
return z;
}
int main()
{
int a=10, b=20;
int sum=0;
sum = Add(a,b);
printf("sum=%d\n", sum);
return 0;
}
函数的特点就是简化代码,代码复用
7.数组C语言中数组的定义:一组相同类型的元素的集合
数组定义int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组最多存放十个元素 数组下标1对应下标0依次往后走
数组的使用通过下表来使用
8.操作符 算数操作符 + - * / %
移位操作符(移(二进制)位操作符) >> (右移) = 符号
如果p是一个结构体指针,则可以使用 p ->【成员】 的方法访问结构体的成员
任何一个指针变量在做 解地址操作前,都必须保证它指向的是有效的,可用的内存块,否则就会出错。坏指针是造成C语言Bug的最频繁的原因之一。
typedef struct
{
char name[31];
int age;
float score;
}Student;
int main(void)
{
Student stu = {"Bob" , 19, 98.0};
Student*ps = &stu;
ps->age = 20;
ps->score = 99.0;
printf("name:%s age:%d
",ps->name,ps->age);
return 0;
}
指针的2个重要属性
指针也是一种数据,指针变量也是一种变量,因此指针 这种数据也符合前面 变量和内存 主题中的特性。 这里我只想强调2个属性: 指针的类型,指针的值。
数组和指针1、数组名作为右值的时候,就是第一个元素的地址。
int main(void)
{
int arr[3] = {1,2,3};
int*p_first = arr;
printf("%d
",*p_first); //1
return 0;
}
函数和指针
函数的指针
每一个函数本身也是一种程序数据,一个函数包含了多条执行语句,它被编译后,实质上是多条机器指令的合集。在程序载入到内存后,函数的机器指令存放在一个特定的逻辑区域:代码区。既然是存放在内存中,那么函数也是有自己的指针的。
void echo(const char *msg)
{
printf("%s",msg);
}
int main(void)
{
void(*p)(const char*) = echo; //函数指针变量指向echo这个函数
p("Hello "); //通过函数的指针p调用函数,等价于echo("Hello ")
echo("World
");
return 0;
}