[详解C语言]一文带你认识C语言,让你醍醐灌顶

初识C语言

前言

  • 本文仅对C语言中部分知识进行简单介绍
  • 使读者可以后续看懂别人的代码
  • 后边对大纲中的内容都会详解

1.什么是C语言

为什么会有语言呢,大家有么有想过?
其实,语言的出现是为了交流,我们学英语是为了和外国人交流
那我们和计算机用什么交流呢?

有一部分帅气的小伙伴就要说了,用键盘和鼠标,手写笔…

其实,人类和计算机的交流采用的是计算机语言,如机器语言,汇编语言

image.png

  • C语言是一门通用计算机编程语言,广泛应用于底层开发。
  • C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言
  • C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同

2.简单的C语言程序

#include <stdio.h> //引入头文件,以便于使用库函数
//函数返回值类型  函数名(参数列表)
int main(){
    printf("hello world");    //使用printf打印其中的字符串
    return 0;//返回值
}

这就是最简单的一个C语言函数了,看结果

image.png

main函数是程序的唯一入口,有且只有一个main函数哦

3.C语言中有哪些数据类型

让我们来看看C语言中的数据类型

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

C语言中的各种数据类型是为了匹配生活中的各种数据,比如整数小数,字母…

那为什么会有这么多整型呢?

因为数据是存储在内存中的,各种数据类型分配的空间不一样,各种整型所占空间不一样,所以,为了更好的利用内存,选择对应范围的数据类型尤为重要

那各种类型分配都多少空间呢?

先来给大家介绍一下计算机概念中的单位

image.png

1byte = 8 bit
1kb = 1024 byte
1mb = 1024 kb

谈论数据类型时,我们使用的单位是字节,C语言提供了sizeof关键字
sizeof用来计算变量或者类型占据内存中多少个字节

#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));
    return 0;
}

结果如下
image.png

不同的编译器可能类型的字节数不一致,这是vs下的结果

4.变量

在生活中,有一些值是在变化的,比如年龄,比如女朋友的体重…

在C语言中,使用变量来表示可变化的值

4.1 如何定义变量

int age = 18;
float weigth = 60.0;
float heigth = 180.0;
char sex = 'M';   
//是不是大家心中的理想型男友,哈哈哈

4.2 如何给变量命名

  • 只能由字母(包括大写和小写)、数字和下划线( _ )组成。
  • 不能以数字开头。
  • 长度不能超过63个字符。
  • 变量名不能使用关键字。

如: 3a 、 int 、ab@c … 就是不合格的变量,编译会失败

在起变量名的时候,大家一定要记住,见名知意,如 体重-weight ,年龄-age

注意: 在c语言中,区分 大小写,如abc和ABC 是两个不同的变量哦!

4.3变量的分类

变量分为全局变量和局部变量

int a = 20;//全局变量
int main(){
    int a = 10;//局部变量
    printf("%d",a);
    char ch = 'a';
    return 0;
}

可以理解为在局部范围内的就是局部变量,那么上述代码结果是啥?会报错吗?
image.png

当局部变量和全局变量重名时,局部优先,大家要避免这种使用

4.4 变量的使用

int main(void){
    float weight = 50;//女朋友体重,单位为kg
    int i = 0;
    scanf("%d",&i);//1表示吃火锅了
    if(i==1)
        weight+=5;//一顿火锅胖十斤
    printf("%.2f",weight);
}

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

生命周期:

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

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

作用域:

一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域

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

5.常量

生活中有些数据是无法发生变化的,比如 性别,血型,身份证号…
C语言常量分为以下几种:

  • 字面常量
  • const 修饰的常变量
  • #define 定义的标识符常量
  • 枚举常量
define PI 3.14  //标识符常量,不可修改
//穷举性别
enum Sex{
    MALE,FEMALE //男 ,  女
};
int main(){
    123; //字面常量
    "helloworld";//字面常量
    
    const int a = 10;
    //a = 20 ; //此处代码编译不过去,错误,但后续可以通过指针修改
    
    printf("%d\n",MALE);//枚举常量 
    return 0;
}

字面常量就是地地道道的常量,就是一个数,你总不能说 2 = 3 去修改它吧
define定义的和枚举常量 都是无法修改的
const修饰的成为常变量,只是给变量了一个无法直接修改的属性,并不是真正的常量

6.字符串+转义字符+注释

6.1字符串

在C语言中,没有字符串类型,我们用字符数组来存储

char str[] = "abc";

字符串有一个默认的结束标志,‘\0’
image.png

给大家介绍一个函数,strlen(char *str) 可以判断字符串有多长,不算 ‘\0’ ,
此函数工作机制是从起始位置碰到’\0’停止 ,头文件<string.h>

#include <stdio.h>
#include <string.h>
int main(){
    char str1[] = "abc";
    char str2[] = {'a','b','c'};
    printf("%d\n",strlen(str1));
    printf("%d\n",strlen(str2));
    
    printf("%d\n",sizeof(str1));
    printf("%d\n",sizeof(str2));
}

我们来分析一下

image.png

看一下结果

image.png

一定要注意字符串结束标记 \0

6.2转义字符

我们要在屏幕打印一个目录 c:\test\test.c

printf("c:\test\test.c");//这样

实际的结果是这样的
image.png
转义字符就是转变了本身的含义,达到意想不到的效果
我们来看一下常见的转义字符

\’用于表示字符常量’
\“用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义符
\a警告字符,蜂鸣
\b退格符
\n换行
\r回车
\t水平制表符
\dddddd表示1~3个八进制的数字。 如: \130 X
\xdddd表示2个十六进制数字。 如: \x30 0

6.3注释

// 我是单行注释
/* 我是多行注释 */

7.选择语句

生活处处是选择,所以C语言用选择/分支结构来表示
image.png

#include <stdio.h>
int main(void){
    int input = 0;
    //好好学习输入1  不好好学习输入2
    printf("好好学习输入1 \n 不好好学习输入2\n");
    scanf("%d",&input);
    if(1 == input){
        printf("收获知识,事业爱情美满);
    }else{
        printf("回家种地/进厂");
    }
    return 0;
}

8.循环语句

在生活中,也有些事情,我们日复一日的再做,比如每天都刷牙,每天都吃饭,都学习

image.png

int main(){
    int count = 0;//敲代码行数
    while(i < 50000)
    {	
        printf("天天敲代码");
        i++;
    }
    return 0;
}

9.函数

大家学习过数学中的函数, 在C语言中,也有函数的概念

main函数就是一个函数 ,关于函数的具体讲解后边再说

#include <stdio.h>
//计算两个数的和
int Add(int x,int y){
    return x + y;
}
int main(){
    
    int a = 10;
    int b = 20;
    int sum = a + b;// 直接计算
    sum = Add(a,b);
    return 0;
}

函数很大的作用在于模块化,我告诉你,你去帮我弄,如上述代码可以理解为

我让张三帮我带个蛋炒饭,给他钱+饭名, 这不就是参数吗。
然后张三回来给我拿了一个蛋炒饭,这不就是返回值吗

10.数组

10.1数组的定义

想这样一个问题,如果存储1-100的数字怎么办,定义100个变量?

C语言有数组的功能,就是一种相同类型数据的集合

int arr[100] = {0};
int arr2[] = {1,2,3,4,5,6,7,8,9,10};// 存储了1-10

10.2数组的下标以及使用

数组中如何找到其中的一个数呢?
C语言提出了下标的概念,从0开始
image.png
我们可以利用下标来给数组中存值,也可以取值

//将1-100的数字 放入数组
int main(){
    int a = 1,i = 0;
    while(i<100){//控制下标
        arr[i] = a;
        a++;
    }
    return 0;
}

11.操作符

关于操作符这个,展开来说太多了,等以后把每个操作符都带大家玩明白

12.常见关键字

C语言提供极其丰富的关键字

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

简单分类一下,等后续文章对每个进行详细介绍
image.png

13.指针

13.1内存

  • 计算机中程序的运行都是在内存中进行的
  • 每个内存单元的大小是1个字节。
  • 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

image.png

变量是创建在内存中的,因为内存是有地址的,所以变量也是有地址的。

int main(){
    int a = 10;
    printf("%p\n",&a);
    printf("%x",&a);
    return 0;
}

image.png

%p 打印地址 & 叫做取地址符 可以取出变量的地址

13.2指针的使用

前边提了一下,const修饰的常量不算真正的常量,可以用指针修改

int main(){
    const int a = 10;
    //a = 20;  不能这样改
    int *p = &a; // 讲a的地址赋给指针变量
    *p  = 20;//  *是解引用,
    //p中存放的是a的地址,*p就相当于a
    printf("%d\n",a);
    return 0;
}

image.png

指针是c语言的灵魂,多多使用

14.结构体

结构体使得C语言有能力描述复杂类型

例如一个学生类

#include <stdio.h>
struct Student{
    int age;//年龄
    char name[20];//姓名
    double score;//成绩
    char sex;//年龄
};
int main() {
    //定义结构体变量
    struct Student ss = { 18,"zhangsan",100,'M' };
    //初始化
    printf("%d\n%s\n%lf\n%c", ss.age, ss.name, ss.score, ss.sex); 
    //  .为结构体成员访问符号
    struct Student* sp = &ss;
    printf("%d\n%s\n%lf\n%c", sp->age,sp->name,sp->score,sp->sex);
    // ->   用指针访问结构体成员
    
    return 0;
}

总结

C语言简单介绍就到这里,后面我会就其中的每个知识点都进行详细剖析
学习C语言没想的那么难,多敲代码 ,多去想
求三连,谢谢大家

  • 43
    点赞
  • 188
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值