初识C语言

本文介绍了C语言的基本概念,包括C语言的性质、第一个C程序的构成、数据类型、常量与变量、字符串和转义字符、注释、选择语句、循环语句、函数、数组、操作符、关键字、宏定义以及指针。详细讲解了每个概念,并通过实例展示了它们的使用方法。
摘要由CSDN通过智能技术生成

初识C语言

本章节的笔记只是对C语言的基础知识的一个小概括

详细的讲解笔记后续会细讲

一、C语言的概念

C语言就是一门通用的计算机语言,广泛应用于底层开发。

二、第一个C语言程序

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

说明:

  1. #include <stdio.h>是该程序的头文件,因为该函数运用到了printf()函数,所以需要引头文件。
  2. 接下来是一个main()函数,C语言有规定,一个完整的C语言程序由一个或多个函数组成,必须有且只有一个main()函数,其可以出现在程序任何位置,程序由此开始执行,也结束于此。
  3. printf()是一个标准输出函数。
  4. return 0的作用是向操作系统返回一个零值,表示程序正常执行完毕。

三、数据类型

类型名称

  • char 字符数据类型
  • short 短整型
  • int 整型
  • long 长整型
  • long long 更长的整形
  • float 单精度浮点数
  • double 双精度浮点数
  • unsigned int 无符号整型
  • unsigned short 无符号短整型
  • unsigned long 无符号长整型
  • 以及更多

格式控制

  • %c 字符
  • %hd 短整型
  • %d 整型
  • %s 字符串
  • %f 单精度浮点数
  • %lf 双精度浮点数
  • %p 地址格式
  • %x 十六进制
  • %o 八进制

类型的大小

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

结果:

在这里插入图片描述

说明:

关于sizeof()的说明
(1)sizeof()的括号内的内容是不进行计算的
(2)sizeof()是运算符不是函数
(3)sizeof()运算符有以下两种格式
	1.用于求得表达式的值所占内存的字节数,其格式如下:
		sizeof 表达式
	2.用于求得某种数据类型的量所占内存的字节数,其格式如下:
		sizeof (表达式)

类型的使用

char ch = 'w';
float weight = 101.5;
int salary = 20000;

四、常量、变量

常量、变量的概念

数学中常数的概念:常数是指固定不变的数值,比如圆周率、真空光速等。

数学中变量的概念:变量是指没有固定的值,可以改变其值,有字母符号来表示,比如y=f(x),x是自变量,y是因变量。

计算机中常量的概念:常量是指在程序运行过程中其值不能改变的量,比如数值和字符值本身就是常量。

计算机中变量的概念:变量是指在程序运行期间其值可以改变的量,比如前面的int a,a就是变量。

定义变量的方法

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

变量的分类

  • 局部变量
  • 全局变量
#include <stdio.h>
int global = 2019;//全局变量
int main()
{
    int local = 2018;//局部变量
    int global = 2020;//局部变量
    printf("global = %d\n",global);
    return 0;
}

总结:

当局部变量和全局变量同名的时候,局部变量优先使用

变量的使用

#include <stdio.h>
int main()
{
    int a=0,b=0,sum=0;
    printf("请输入两个操作数:>");
    scanf("%d%d",&a,&b);//输入函数
    sum = a + b;
    printf("sum = %d\n",sum);//输出函数
    return 0;
}

说明:scanf()等函数使用时存在不安全,若使用VS提供的函数则会存在跨平台障碍,固应在源文件第一行写

#define _CRT_SECURE_NO_WARNINGS 1

由此来忽略函数存在不安全的警告或错误。

使默认有这句话的话应该打开VS2019的文件位置▶️Program Files (x86)▶️Microsoft Visual Studio▶️2019▶️Professional▶️在搜索框内搜vcprojectitems并点▶️右击newc++file,用Notepad++写上那句话并保存就可以每次默认忽略不安全问题。

变量的作用域和生命周期

作用域

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

  1. 局部变量的作用域是变量所在的局部范围。
  2. 全局变量的作用域是整个工程。在工程的另一个文件里用到该全局变量时需要进行申明,就需要用到extern关键字,比如extern int global;

生命周期

生命周期概念:变量的创建到变量的销毁之间的一个时间段

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

常量

常量的分类

  • 字面常量
  • const修饰的常变量
  • #define定义的标识符常量
  • 枚举常量
#include <stdio.h>
#define MAX 5+5//#define定义的 标识符常量,但凡MAX出现,那就相当于5+5(不是10)
enum Sex//枚举常量的应用,enum Sex就是一个类型
{
    MALE,
    FEMALE,
    SECRET
};
int main()
{
    52.4;//字面常量
    const float a = 5;
    //const 修饰的常量,经此常变量a将不可改变(a本质上仍然是变量,不可以放在数组的[]中),不然会报错
    return 0;
}

五、字符串、转义字符、注释

字符串

字符串是由一对" "括起来的字符序列(包括转义字符),其结束标志是\0,计算字符串长度的时候 \0 是结束标志,不算作字符串,但是会占内存一个字节。

#include <stdio.h>
//打印字符
int main()
{
    char arr1[] = "Hello";
    char arr2[] = {'H','e','l','l','o'};
    printf("%s\n",arr1);//正常打印
    printf("%s\n",arr2);//会有乱码,因为字符打印唯有遇到\0才会停止
    return 0}

转义字符

转义字符的概念:以’'开头的特殊字符序列,也是字符常量的一种,内存中占一个字节

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

注释

注释用于不需要的代码,可以注释掉或者代码比较难懂,可以加注释

分格:

1./*xxxxxx*/  缺陷:不能嵌套注释
2.//xxxxxxxx  可以注释一行也可以注释多行,推荐

六、选择语句

#include <stdio.h>
int main()
{
    int a = 3,b = 5;
    if(a > b)
        printf("%d",a);//运用if-else语句,输出较大值
    else
        printf("%d",b);
    return 0;
}

七、循环语句

  • while 语句
  • for 语句
  • do…while语句
//while循环的实现
#include <stdio.h>
int main()
{
    int i = 0;
    while(i < 10)
    {
        printf("%d",i);
        i++;
    }
    return 0;
}

八、函数

#include <stdio.h>
int Add(int a,int b)
{
    return a + b;
}
int main()
{
    int a = 0,b = 0,sum = 0;
    scanf("%d %d",&a,&b);
    sum = Add(a,b);
    printf("%d",sum);
    return 0;
}

函数的特点就是简化代码,方便代码的重复使用

九、数组

数组的概念:一组相同类型元素的集合

数组的定义

int arr[10] = {1,2,3,4,5,6,7,8,9,10}
  • 数组可以不完全定义,未定义的就算0
  • 数组的[ ]中不可以是变量
  • 数组的下标从0开始

数组的使用

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

十、操作符

算术操作符 例如:+ - * / %

移位操作符 例如:>> <<

位操作符 例如:& ^ |

赋值操作符 例如:= += -= *= /= &= ^= != >>= <<=

单目操作符 例如:! - + & sizeof – ++ ~ (类型)

关系操作符 例如:> >= < <= != ==

逻辑操作符 例如:&& ||

条件操作符 例如:exp1 ? exp2 : exp3(exp1条件为真则执行exp2,为假则执行exp3)

逗号表达式 例如 :exp1, exp2, exp3, …expN(从左向右计算,整个表达式结果是最后一个表达式的结果)

下标引用、函数调用和结构成员 例如:[] () . ->

十一、常见关键字

C语言提供的关键字,不能自己创建关键字

关键字不能做变量名

关键字作用关键字作用
auto声明自动变量extern声明变量是在其他文件正声明
short声明短整型变量或函数register声明寄存器变量
int声明整型变量或函数static声明静态变量
long声明长整型变量或函数volatile说明变量在程序执行中可被隐含地改变
float声明浮点型变量或函数void声明函数无返回值或无参数,声明无类型指针
double声明双精度变量或函数if条件语句
char声明字符型变量或函数else条件语句否定分支(与 if 连用)
struct声明结构体变量或函数switch用于开关语句
union声明共用数据类型case开关语句分支
enum声明枚举类型for一种循环语句
typedef用以给数据类型取别名do循环语句的循环体
const声明只读变量while循环语句的循环条件
unsigned声明无符号类型变量或函数goto无条件跳转语句
signed声明有符号类型变量或函数continue结束当前循环,开始下一轮循环
break跳出当前循环default开关语句中的“其他”分支
sizeof计算数据类型长度return子程序返回语句(可以带参数,也可不带参数)循环条件

简单介绍几个:

  1. typedef

    typedef 类型定义,就是对类型的重命名

    typedef unsigned int u_int;
    //将unsigned int重命名为u_int,u_int变成了一个类型名
    int main()
    {
        unsigned int num1 = 0;
        u_int num2 = 0;//这一句起的作用和上一句是一样的
        return 0;
    }
    
  2. static

  • static修饰局部变量

    改变了局部变量的生命周期,本质上是改变了变量的存储类型,从存储在栈区到存储到静态区。

  • static 修饰全局变量

    使得这个全局变量只能在自己所在的源文件内部可以使用,其他源文件不能使用。

  • static修饰函数

    使这个函数只能在本源文件内使用,不能在其他源文件内使

    十二、#define 定义常量和宏

    #define MAX 100//define 定义标识符常量
    #define ADD(x,y) ((x)+(y))//define 定义宏
    #include <stdio.h>
    int main()
    {
        int sum = ADD(2,3);//5
        sum = 10*ADD(2,3);//50
        return 0;
    }
    

    十三、指针

    #include <stdio.h>
    int main()
    {
        int num = 10;
        int*ps = num;//num的地址存在了指针变量ps里
        *ps = 20;//解引用ps,ps指向变量num,因此可以来改变num中的值
        return 0;
    }
    

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

    十四、结构体

    #include <stdio.h>
    struct Stu
    {
        char name[20];
        int age;
        char sex[5];
    };
    int main()
    {
        struct Stu s = {"张三",20,"男"};//结构体的创建和初始化
        struct Stu*ps = &s;
        printf("%s %d %s",s.name,s.age,s.sex);//结构体变量.成员变量
        printf("%s %d %s",ps->name,ps->age,ps->sex);//结构体指针->成员变量名
        return 0;
    }
    
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

富春山居_ZYY(已黑化)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值