初识C语言

初识C语言

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

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

一、C语言的概念

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

二、第一个C语言程序

#include 
int main()
{
    printf("hello world\n");
    return 0;
}

说明:

  1. #include 是该程序的头文件,因为该函数运用到了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 
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;
}

结果:

初识C语言_第1张图片

说明:

关于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 
int global = 2019;//全局变量
int main()
{
    int local = 2018;//局部变量
    int global = 2020;//局部变量
    printf("global = %d\n",global);
    return 0;
}

总结:

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

变量的使用

#include 
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 
#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 
//打印字符
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 垂直制表符
\ddd ddd表示1~3个八进制的数字。\130 就是X
\xdd dd表示2个十六进制数字。\x30 就是0

注释

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

分格:

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

六、选择语句

#include 
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 
int main()
{
    int i = 0;
    while(i < 10)
    {
        printf("%d",i);
        i++;
    }
    return 0;
}

八、函数

#include 
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 
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 
    int main()
    {
        int sum = ADD(2,3);//5
        sum = 10*ADD(2,3);//50
        return 0;
    }
    

    十三、指针

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

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

    十四、结构体

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

你可能感兴趣的:(C笔记,c语言)