【C语言初阶】初识C语言 | C语言知识预览

在这里插入图片描述
在这里插入图片描述

文章目录

  • 💐专栏导读
  • 💐文章导读
  • 🌷什么是C语言?
  • 🌷第一个C语言程序
  • 🌷数据类型
  • 🌷变量、常量、字符串
    • 🌺定义变量的方法
    • 🌺变量的分类
    • 🌺变量的使用
    • 🌺变量的作用域和生命周期
    • 🌺常量
    • 🌺字符串
  • 🌷转义字符
  • 🌷注释
  • 🌷选择语句
  • 🌷循环语句
  • 🌷函数
  • 🌷数组
  • 🌷操作符
  • 🌷常见关键字
  • 🌷#define定义常量和宏
  • 🌷指针
  • 🌷结构体

💐专栏导读

🌸作者简介:花想云,在读本科生一枚,致力于 C/C++、Linux 学习。

🌸专栏简介:本文收录于 C语言初阶专栏,本专栏主要内容为C语言的初阶知识的全套讲解,包含初识C语言、函数、数组、分支与循环、操作符、指针初阶的讲解。

🌸相关专栏推荐:C语言进阶系列数据结构与算法

💐文章导读

本篇文章主要内容为了解C语言阶段我们将要学习的内容。在本文中,我们不会对每个知识点都进行详细介绍,旨在大致了解即可。文章中提到的所有知识点都会在后面的文章中详细讲解。


🌷什么是C语言?

C语言是一门通用计算机编程语言,广泛应用于底层开发。通俗的话讲,C语言就是我们人与计算机沟通语言。有的小伙伴可能听说过很多编程语言,例如是否经常看到Javapython等字眼。

计算机技术发展至今,编程语言层出不穷,各种各样的语言经历着诞生、发展、有的早已被淘汰、有的时隔多年依旧熠熠生辉。C语言就是后者。

C生万物,编程之本!长远IT职业发展的首选,C语言是母体语言,是人机交互接近底层的桥梁,学会C,相当于掌握技术核心知识点一竿子打通。 IT行业,一般每10年就有一次变革50年间,在TIOBE排行榜中C/C++位置长期霸占前三名,没有丝毫撼动,可谓经典永不过时!

🌷第一个C语言程序

#include <stdio.h>
int main()
{
 	printf("hello world\n");
	return 0;
}

相信每位程序员都曾在写过这样一段代码,它所实现的功能就是在屏幕上打印出hello world,当你在屏幕上看到这句话时,那么恭喜你推开了C语言世界的大门!这里不对这段代码做出解释,我们接着往下看~

🌷数据类型

C语言中包含各种各样的数据类型。

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

那么什么是数据类型呢?生活中存在各种各样的数据,一串数字,一句话…存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。

数据类型的存在是为了定义变量,描述该变量的特性以及所占的空间大小

int age = 150;
float weight = 45.5f;
char ch = 'w';

而且每种数据类型还有着大小之分,我们可以用关键字sizeof求出每种类型数据的大小。至于sizeof是干什么用的,现在不必纠结。

#include <stdio.h>
int main()
{
    printf("%d\n", sizeof(char));//1
    printf("%d\n", sizeof(short));//2
    printf("%d\n", sizeof(int));//4
    printf("%d\n", sizeof(long));//4
    printf("%d\n", sizeof(long long));//8
    printf("%d\n", sizeof(float));//4
    printf("%d\n", sizeof(double));//8
    printf("%d\n", sizeof(long double));//8
    return 0; 
}

运行结果如下图所示。
在这里插入图片描述

🌷变量、常量、字符串

生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等),有些值是可变的(比如:年龄,体重,薪资)。

不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。

🌺定义变量的方法

int age = 150;
float weight = 45.5f;
char ch = 'w';

这里的=并不是数学意义上的两者相等,而是赋值。例如此时的age是150。

🌺变量的分类

变量按照使用范围可分为

  • 全局变量
  • 局部变量
#include <stdio.h>
int global = 2019;//全局变量
int main()
{
    int local = 2018;//局部变量
    //下面定义的global会不会有问题?
    int global = 2020;//局部变量
    printf("global = %d\n", global);
    return 0; 
}

🌺变量的使用

#include <stdio.h>
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");//提示输入
    scanf("%d %d", &num1, &num2);//将输入的两个数字存放到num1,num2
    sum = num1 + num2;//将num1与num2的和赋值给sum
    printf("sum = %d\n", sum);//打印sum的值
    return 0; 
}

提示

  • scanf:从键盘上获取数据,保存到变量中。

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

作用域

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

  • 局部变量的作用域是变量所在的局部范围
  • 全局变量的作用域是整个工程

生命周期

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

  • 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  • 全局变量的生命周期是:整个程序的生命周期。

🌺常量

C语言中的常量和变量的定义的形式有所差异,C语言中的常量分为以下以下几种:

  • 字面常量
  • const 修饰的常变量
  • #define 定义的标识符常量
  • 枚举常量
#include <stdio.h>
//举例
enum Sex
{
 MALE,
 FEMALE,
 SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
    //字面常量演示
    3.14;//字面常量
    1000;//字面常量
    
    //const 修饰的常变量
    const float pai = 3.14f;   //这里的pai是const修饰的常变量
    pai = 5.14;//是不能直接修改的!
    
    //#define的标识符常量 演示
 #define MAX 100
    printf("max = %d\n", MAX);
    
    //枚举常量演示
    printf("%d\n", MALE);
    printf("%d\n", FEMALE);
    printf("%d\n", SECRET);
    //注:枚举常量的默认是从0开始,依次向下递增1的
    return 0;
}

常量 顾名思义就是不可变的值。例如“5”这个数字,数学中的常数,C语言里我们称之为常量。如果我们这样让5=4,显然这是不可取的,我们无法改变它的值。

🌺字符串

"hello world"

这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串;在C语言中,其实是没有字符串这种类型的,我们通常称这种字符数组字符串

🌷转义字符

顾名思义,转义字符就是将一个字符原来的含义改变了,通常的做法是\+字符

下面为一些常见的转义字符。

转义字符释义
?-在书写连续多个问号时使用,防止他们被解析成三字母词-
用于表示字符常量‘
"用于表示一个字符串内部的双引号
\用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的数字。 如: \130 X
\xdddd表示2个十六进制数字。 如: \x300

🌷注释

注释有两种风格:

  1. /*xxxxxx*/,缺陷:不能嵌套注释。
/* 这是一段注释*/
  1. //xxxxxxxx,可以注释一行也可以注释多行
//这是一段注释

注释的作用:

  • 代码中有不需要的代码可以直接删除,也可以注释掉;
  • 代码中有些代码比较难懂,可以加一下注释文字;

为了防止我们以后写的代码太过深奥,担心以后的自己的不懂时,我们尽量学会很好的使用注释。

🌷选择语句

如果你好好学习,走上人生巅峰,如果你不学习,毕业等于失业,回家卖红薯,这就是选择。
​​​​
在这里我们用if语句实现:

#include <stdio.h>
int main()
{
	int coding = 0;
	printf("你会好好学习吗(选择1 or 0):>");
	scanf("%d", &coding);
	if (coding == 1)
	{
		prinf("年薪百万\n");
	}
	else
	{
		printf("回家卖红薯\n");
	}
	return 0;
}

🌷循环语句

有些事必须一直做,比如我日复一日的为我的博客求点赞,比如大家,日复一日的学习。C语言中如何实现循环呢?一般有三种方式:

  • while语句
  • for语句
  • do ... while语句

三种循环语句在不同的场景下有着各自的长处,今天我们不过多介绍,下面用while语句来展示一下。

场景:小明突然有一天受到老师感化,立志要好好学习,于是决定每天写一行代码。写够一百行时就发条朋友圈。

#include <stdio.h>
int main()
{
	int count = 0;
	while (count < 100)
	{
		count++;
	}
	printf("%d\n", count);
	printf("我要发朋友圈!");
	return 0;
}

🌷函数

C语言中的函数就是可以实现某种功能的模块。例如,加减乘除等;

#include <stdio.h>
int Add(int x, int y) {
   int z = x+y;
   return z; }
int main()
{
    int num1 = 0;
   int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = Add(num1, num2);
    printf("sum = %d\n", sum);
    return 0; 
}

C语言中,我们可以自己设置各种各样的函数来实现我们的功能。我们把每种功能封装起来,每个函数都独立的完成一件事情,避免了我们的代码太过复杂,没有条理。

🌷数组

假设我们要存储1-10的数字,怎么存储?C语言中给了数组的定义:一组相同类型元素的集合

数组的定义

int array[10] = {12,14,16,16,8,16,19,18,19,10};//定义一个整形数组,最多放10个元素

数组的下标
数组的每个元素都有一个下标,下标是从0开始的。数组元素可以通过下标来访问的。

如果我们想要得到数组里的从前往后的第3个元素,就可以用[] 来完成。

int array[10] = {12,14,16,16,8,16,19,18,19,10};
printf("%d\n",array[2];

数组的使用

当我们想一次性将整型数组里的内容全部打印的话,需要借助之前提到的循环语句

#include <stdio.h>
int main()
{
    int i = 0;
    int array[10] = {1,2,3,4,5,6,7,8,9,10};
    for(i=0; i<10; i++)
    {
       printf("%d ", array[i]);
    }
    printf("\n");
    return 0;
 }

🌷操作符

C语言中有各种各样的操作符,如下;

  • 算术操作符
+     -     *     /     %
  • 移位操作符
>>       <<
  • 位操作符
&     ^     |
  • 赋值操作符
=    +=    -=    *=    /=    &=    ^=   |=    >>=   <<=
  • 单目操作符
!           逻辑反操作
-           负值
+           正值
&           取地址
sizeof      操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--          前置、后置--
++          前置、后置++
*           间接访问操作符(解引用操作符)
(类型)       强制类型转换
  • 关系操作符
>
>=
<
<=
!=      用于测试“不相等”
==      用于测试“相等”
  • 逻辑操作符
&&          逻辑与
||          逻辑或
  • 条件操作符
exp1 ? exp2 : exp3
  • 逗号表达式
exp1, exp2, exp3, …expN
  • 下标引用、函数调用和结构体成员
[]    ()    .    ->

🌷常见关键字

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

这些关键字无非就是C语言为我们提供的具有某种功能的标识。其多是英文单词或者英文单词的缩略形式,而其本身含义也相差不多。例如char就是character(字符)的缩写,而它就是代表着字符型这种数据类型。

🌷#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; 
}

🌷指针

变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。

我们可以将某个变量的地址保存到新的变量中,而这个新的变量就叫做指针变量简称指针

#include <stdio.h>
int main()
{
    int num = 10;
    int *p = &num;
    *p = 20;
    return 0;
}

🌷结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。这里只能使用结构体来描述了。

//结构体类型的定义
struct Stu
{
    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    char id[15]//学号
};

到此为止,C语言的知识点已经预览完毕,在接下来的文章中,我们将会详细学习每一个知识点,一起期待吧~
在这里插入图片描述

点击下方个人名片,可添加博主的个人QQ,交流会更方便哦~
*** ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓***

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/2708.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DJ2-5 DNS:Internet 的目录服务

目录 1. DNS 简介 2. DNS 服务器提供的功能 3. 分布式、层次数据库 4. DNS 查询方法 5. DNS 缓存和权威 DNS 服务器记录更新 6. DNS 记录 7. DNS 报文 8. 在 DNS 数据库中插入记录 9. DNS 攻击 1. DNS 简介 名称&#xff1a;Domain Name System DNS 是&#xff1a; …

vue面试题(day06)

文章目录前言请谈谈WXML与标准的html的异同&#xff1f;请谈谈WXSS和CSS的异同&#xff1f;请谈谈微信小程序主要目录和文件的作用&#xff1f;请谈谈小程序的双向绑定和vue的异同&#xff1f;简单描述下微信小程序的相关文件类型&#xff1f;微信小程序有哪些传值(传递数据)方…

【新星计划2023】SQL SERVER (01) -- 基础知识

【新星计划2023】SQL SERVER -- 基础知识1. Introduction1.1 Official Website1.2 Conn Tool2. 基础命令2.1 建库建表2.2 Alter2.3 Drop2.3 Big Data -- Postgres3.Awakening1. Introduction 1.1 Official Website 官方文档&#xff08;小技巧&#xff09; Officail Website: …

十个Python图像处理工具,不可不知

这些Python库提供了一种简单直观的方法来转换图像并理解底层数据。 今天的世界充满了数据&#xff0c;图像是这些数据的重要组成部分。但是&#xff0c;在使用它们之前&#xff0c;必须对这些数字图像进行处理 - 分析和操作&#xff0c;以提高其质量或提取一些可以使用的信息。…

【C++学习】继承

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; C是面向对象的编程语言&#xff0c;它有很多的特性&#xff0c;但是最重要的就是封装&#xff0c;继承…

【3DoF算法】

VR 3DoF算法介绍 核心&#xff1a;3DoF算法应用场景&#xff0c;在VIO应用中&#xff0c;当只有测量没有观测的情况下&#xff0c;6DoF算法的预测会退化成一个只有测量的3DoF算法&#xff0c;这时候需要使用3DoF算法&#xff0c;来更加稳定准确的获取3DoF位姿&#xff0c;直到…

【VSCode】Windows 下搭建 Fortran 环境

文章目录Part.I 预备知识Part.II 安装与配置Chap.I 编译环境Chap.II 插件Part.III 测试Chap.I 一个示例Chap.II 注意事项Part.I 预备知识 Fortran 是一种比较古老的语言了&#xff0c;当时作为一种科学计算工具&#xff0c;还是比较火的&#xff0c;因为很多有名的软件都是基于…

LFM雷达实现及USRP验证【章节2:LFM雷达测距】

目录 1. 参数设计 几个重要的约束关系 仿真参数设计 2. matlab雷达测距代码 完整源码 代码分析 回顾&#xff1a;LFM的基本原理请详见第一章 本章节将介绍LFM雷达测距的原理及实现 1. 参数设计 几个重要的约束关系 带通采样定理&#xff1a; 因此如果我们B80MHz时&a…

SQL优化13连问,收藏好!

1.日常工作中&#xff0c;你是怎么优化SQL的&#xff1f; 大家可以从这几个维度回答这个问题&#xff1a; 分析慢查询日志 使用explain查看执行计划 索引优化 深分页优化 避免全表扫描 避免返回不必要的数据&#xff08;如select具体字段而不是select*&#xff09; 使用…

【Android -- 开发工具】Xshell 6 安装和使用教程

一、简介 Xshell 其实就是一个远程终端工具&#xff0c;它可以将你的个人电脑和你在远端的机器连接起来&#xff0c;通过向 Xshell 输入命令然后他通过网络将命令传送给远端Linux机器然后远端的Linux机器将其运行结果通过网络传回个人电脑。 二、Xshell 6 的安装 首先&#…

如何通过命令行查看CentOS版本信息和linux系统信息

1.如何查看已安装的CentOS版本信息&#xff1a; 1.cat /proc/version 2.uname -a 3.uname -r 4.cat /etc/centos-release 5.lsb_release -a 6.hostnamectl1. 第一种方式输出的结果是&#xff1a; Linux version 3.10.0-1127.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) …

算法基础-回溯算法

回溯算法大致分为以下几类&#xff1a; 组合&#xff1a;组合、组合总和、电话号码的字母组合 分割&#xff1a;分割回文串、复原IP地址 子集&#xff1a;子集 排列&#xff1a;全排列 棋盘问题&#xff1a;N皇后、解数独 其他&#xff1a;递增子序列、重新安排行程 一、什么是…

gns3:动态路由(ospf) area0 骨干网络(域间)(ABR)+ ospf 连接 rip (外部)(ASBR)+ 区域划分

1.配置好接口ip 全部处于up状态2.配置好lookback口 增加一个虚拟直连网段全部为 255.255.255.0的子网掩码实现上边ospf之间通信r1的全局模式router ospf 1network 192.168.1.0 0.0.0.255 area 1network 1.1.1.0 0.0.0.255 area 1宣告直连 并且划分area 区域为1r2全局模式router…

一种LCD屏闪问题的调试

背景 项目使用ESP32-S3 RGB接口驱动的LCD, 框架 idf-v5.0, LVGL-v7.11 显示画面正常, 但肉眼可见的像是背光在闪烁, 背光电路是应用很久的经典电路, 且排查背光驱动无错, 但开机一段时间后, 闪烁会明显减轻 记录 这块屏的显示驱动芯片为ST7701S, 查看芯片手册有说明特定的上…

全网最完整,接口测试总结彻底打通接口自动化大门,看这篇就够了......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 所谓接口&#xff0…

音视频开发—MediaCodec 解码H264/H265码流视频

使用MediaCodec目的 MediaCodec是Android底层多媒体框架的一部分&#xff0c;通常与MediaExtractor、MediaMuxer、AudioTrack结合使用&#xff0c;可以编码H264、H265、AAC、3gp等常见的音视频格式 MediaCodec工作原理是处理输入数据以产生输出数据 MediaCodec工作流程 Med…

SpringBoot整合Flink(施耐德PLC物联网信息采集)

SpringBoot整合Flink&#xff08;施耐德PLC物联网信息采集&#xff09;Linux环境安装kafka前情&#xff1a;施耐德PLC设备&#xff08;TM200C16R&#xff09;设置好信息采集程序&#xff0c;连接局域网&#xff0c;SpringBoot订阅MQTT主题&#xff0c;消息转至kafka&#xff0c…

计算机网络体系结构——“计算机网络”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰来学习一个全新的知识点&#xff0c;就是计算机网络啦&#xff0c;下面&#xff0c;开始虚心学习。 计算机网络的概念 计算机网络的功能 计算机网络的组成 计算机网络的分类 标准化工作 计算机网络的性能 计算机网络的概念 …

Hadoop集群环境配置搭建

一、简单介绍 Hadoop最早诞生于Cutting于1998年左右开发的一个全文文本搜索引擎 Lucene&#xff0c;这个搜索引擎在2001年成为Apache基金会的一个子项目&#xff0c;也是 ElasticSearch等重要搜索引擎的底层基础。 项目官方&#xff1a;https://hadoop.apache.org/ 二、Linux环…

SpringBoot 结合RabbitMQ与Redis实现商品的并发下单【SpringBoot系列12】

SpringCloud 大型系列课程正在制作中&#xff0c;欢迎大家关注与提意见。 程序员每天的CV 与 板砖&#xff0c;也要知其所以然&#xff0c;本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发 1 项目准备 SpringBoot 整合 RabbitMQ 消息队…