初识C语言

本文详细梳理了C语言的基础知识点,包括C语言的起源、第一个C语言程序、数据类型、变量与常量、字符串与转义字符、注释、选择语句、循环语句、函数、数组、操作符、常用关键字、宏定义、指针和结构体。通过实例代码展示了各种概念的使用,是学习C语言的良好入门资料。
摘要由CSDN通过智能技术生成

学习一门语言,要先广而后精。

这里先大概梳理一下C语言的知识点,归为以下14大类。

目录

1. 什么是C语言?

2. 第一个C语言程序

3. 数据类型

4. 变量、常量

4.1 变量

4.2 常量

5. 字符串、转义字符、注释

5.1 字符串

5.2 转义字符

5.3 注释

6. 选择语句

7. 循环语句

8. 函数

9. 数组

10. 操作符

11. 常用关键字

12. define定义常量与宏

13. 指针

14. 结构体


做了一份导图,清晰一点

1. 什么是C语言?

1972年C语言诞生于贝尔实验室,具有可移植性,功能强大。

C语言是一门高级程序设计语言,面向过程

C语言有自己的规则,目前有两个通用标准C99C11

以下是C语言的优点:(具体可看C Primer Plus)

2. 第一个C语言程序

#include <stdio.h>

int main()
{
    printf("hello world");
    return 0;
}

#include <stdio.h> 指的是调用的头文件

stdio 即standard input output(标准输入输出),当用到 printf() 与 scanf() 函数需调用。

int 代表整数类型

main() 是一个函数,它是程序的入口,一个工程中有且只有一个

return 0; 表示程序运行结束。

3. 数据类型

三大类型:字符类型、整型浮点型

单位 byte(1 byte = 8 bit),剩下都是1024倍

数据类型名称字节大小格式符
char字符型1%c
short短整型2%d
int整型4%d
long长整型4%d
long long更长的整型8%d
short单精度浮点数4%f
double双精度浮点数8%lf

4. 变量、常量

顾名思义,常量即不变的量,变量指变化的的量

4.1 变量

变量可以具体分为局部变量全局变量

这里区分一下作用域和生命周期两个概念。

作用域

局部变量作用域是指变量所在的局部范围

全局变量的作用域是整个工程

生命周期

局部变量的生命周期从进作用域开始到出作用域结束

全局变量的生命周期即整个程序的生命周期

#include <stdio.h>

int a = 10;       //这是一个全局变量
int main()
{
    int a = 9;    //这是一个局部变量
    printf("%d", a);
    return 0;
}

如代码所示,当局部变量与全局变量冲突时,优先局部变量

4.2 常量

常量可分为3种类型:const修饰#define定义的标识符常量枚举常量

#include <stdio.h>

enum Sex
{
 MALE,
 FEMALE,
 SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量

int main()
{
    3.14;//字面常量
    1000;//字面常量
    const float pai = 3.14f;   //const 修饰的常量
    pai = 5.14;                //常量不能修改
    #define MAX 100            //#define的标识符常量    
    return 0;
}

5. 字符串、转义字符、注释

5.1 字符串

字符串,即多个字符组成。

C语言中没有对应关键字存放,但可以用字符数组来运行。

#include <stdio.h>

int main()
{
    char arr1[] = "hello";
    char arr2[] = {'h', 'e', 'l', 'l', 'o'};
    char arr3[] = {'h', 'e', 'l', 'l', 'o', '\0'}};
    return 0;
}

arr1 就是一个标准的字符串写法。

注意比较这里 arr2 与 arr3,

arr3 多了一个'\0', 这是字符串的结束语句,当用双引号写字符串默认添加(即arr1内默认有'\0')

由于arr2没有结束标志,这时输出arr2

完美地出现了乱码。

而arr3就是相应的解决办法,由此可见 '\0' 的重要性。

:'\0' 占一字节内存空间,但是本身不算作字符串内容。

5.2 转义字符

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

这些转义字符不用特地去背,经常用用就熟悉了。

#include <stdio.h>

int main()
{
    printf("c:\code\test.c\n");
    return 0;
}

那么这一行代码会输出什么呢?

注意里面的转义字符,'\c'、'\t'、'\n'都是转义字符,'\c'无对应意思,只打印'c'

5.3 注释

注释就是用来补充说明代码,也可以去掉一些不需要的代码

一定要常写注释!

一定要常写注释!

一定要常写注释!

注释一共有两种风格。

1)/* xxxxxxxx */

2)//xxxxxxxxxxxx(推荐这种)

补充一下vs的快捷键: ctrl + k 再按 ctrl + c

6. 选择语句

选择语句共两种:switch if 语句

这里不细说,之后学习深入再讲,直接上代码演示用法

#include <stdio.h>

int main()
{
   int coding = 0;
   printf("你会去敲代码吗?(选择1 or 0):>");
   scanf("%d", &coding);
   if(coding == 1)
   {
      printf("坚持,你会有好offer\n");
   }
    else
   {
      printf("放弃,回家卖红薯\n");
   }
   return 0;
}

再用switch写一份同样的: 

#include <stdio.h>

int main()
{
   int coding = 0;
   printf("你会去敲代码吗?(选择1 or 0):>");
   scanf("%d", &coding);
   switch(coding)
   {
   case 1:
      printf("坚持,你会有好offer\n");
      break;
   case 2:
      printf("放弃,回家卖红薯\n");
      break;
   }
   return 0;
}

7. 循环语句

循环语句共三种: whilefordo-while

在这先简单演示while用法,后面两个后期讲。

//while循环的实例
#include <stdio.h>

int main()
{
    int line = 0;
    while(line<=100000)
   {
        line++;
        printf("我要继续努力敲代码\n");
   }
    if(line>100000)
        printf("赢取白富美\n");
    return 0;
}

8. 函数

函数就是为了简化代码,方便反复使用。直接上实例。

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

9. 数组

数组就是一组相同类型元素的集合。

这里罗列一些注意点:

1)数组的字节大小跟着数组容量来。

此图结果为4 

 

 此图结果为6

2)数组的大小必须是常量。

const int num = 10;

此处num为常变量

即num本身是一个变量,但是const修饰后从语法层面上变成了常量,本质上还是变量

int arr[num] = {0};

所以这种写法是错误的。

10. 操作符

这里简单罗列一下,后面具体整理:

  1.算术运算符

  用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。

  2.关系运算符

  用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。

  3.逻辑运算符

  用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

  4.位操作运算符

  参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。

  5.赋值运算符

  用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。

  6.条件运算符

  这是一个三目运算符,用于条件求值(a ? b : c)。

  7.逗号运算符

  用于把若干表达式组合成一个表达式(a,b, c)。

  8.指针运算符

  用于取内容(*)和取地址(&)二种运算。

  9.求字节数运算符

  用于计算数据类型所占的字节数(sizeof)。

  10.特殊运算符

  有括号(),下标[],成员(→,.)等几种。

11. 常用关键字

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

不用背,用多了就记住了,具体后面讲。

12. 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;
}

13. 指针

了解指针,就要了解内存

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。

所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

#include <stdio.h>

int main()
{
    int num = 10;
    &num;                     //取出num的地址
    //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
    printf("%p\n", &num);     //打印地址,%p是以地址的形式打印
    return 0;
}

那地址如何存储,需要定义指针变量

#include <stdio.h>

int main()
{
    int num = 10;
    int *p = &num;         //取num的地址存放到p中,p即为指针变量
    *p = 20;               //'*' 在这为解引用字符,即解析p,再将20存入解析后的地址
    return 0;
}

当然,指针变量本质上也是一个变量,也有大小。 

#include <stdio.h>
int main()
{
    printf("%d\n", sizeof(char *));
    printf("%d\n", sizeof(short *));
    printf("%d\n", sizeof(int *));
    printf("%d\n", sizeof(double *));
    return 0;
}

 结论:指针大小在32位平台是4个字节,64位平台是8个字节。

14. 结构体

描述一个学生,学生包含: 名字+年龄+性别+学号 这几项信息。

一般一个数据类型肯定不能存放,则用结构体来表示这类数据。

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

例如:

struct Stu
{
    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    char id[15]; //学号
};//这里';'不能少

//初始化结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};

//.为结构成员访问操作符
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语言知识点,后期学习我还会持续更新,

欢迎大家来指正,觉得不错可以点一个赞呀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶chuchu丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值