目标:10k

签名:道阻且长,行则将至。

一些计划:

1. 2天更新一期 IUTV

2. 每天一节课 一周5节 + 完成作业 + 整理笔记

3. 2天一节英语课 + 一天一个单词

==C++==/IUTV/单词==Linux==/英语/单词作业/IUTV/单词==C++==/英语/单词==Linux==/IUTV/单词作业/英语/单词==C==/刷题/IUTV

六月

12345
6789101112
13141516==17====18==/C++/英语/IUTV==19==/C++/刷题/IUTV
==20==C++/IUTV/单词==21==/C++/linux/英语==22==C++/IUTV/作业==23==C++/英语/刷题==24==Linux/IUTV==25==C++/作业/C/IUTV==26==/刷题/IUTV
==27==/C++/IUTV/刷题==28==/Linux/英语~~/笔试==29==/刷题/作业/IUTV==30==/C++/英语/

七月

123
45678910
11121314151617
18192021222324
25262728293031

八月

1234567
891011121314
15161718192021
22232425262728
293031

看课 -> 笔记 -> 习题 -> 博客

初识C语言

数据类型解释
char字符数据类型 (1)
short短整型 (2)
int整形 (4)
long长整型 (4)
long long更长的整形 (8)
float单精度浮点数 (4)
double双精度浮点数 (8)
long double长 双精度浮点数 (8)
C语言有没有字符串类型?
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));

    sizeof();求字符的大小
    strlen(); 求字符串的长度
    %d - 整数
    %c - 字符
    printf("%d\n", 100);  100
    printf("%c\n", 100);  d  - ASCII码

    return 0;
}

    char ch = 'e';
    printf("%c\n", ch);  e
    printf("%d\n", ch);  101 - ASCII码值

初识C语言2

作用域

1. 局部变量的作用域是变量所在的局部范围。
2. 全局变量的作用域是整个工程。

局部变量的作用域

第一种情况:可以打印
int main()
{
    int b = 10
    {
        printf("%d\n",b);
    }
    return 0;
}
第二种情况:不可以打印 说明此时的int的作用域只在{}里
int main()
{
    {
        int b = 10
    }
    printf("%d\n",b);
    return 0;
}

全局变量的作用域

在整个工程文件中都能用
工程文件:头文件
         源文件
            test.c
            test2.c
            
**在test.c中的全局变量在test2.c中也能使用**

需要声明:
    extern int a;   
    extern - 用关键字声明

生命周期

局部变量的生命周期:

进作用域生命开始
int main()
{
    int a = 0
    return 0;
}
出作用域生命结束

全局变量的生命周期

程序(main函数)的生命周期
生命周期 结束后 销毁 但是内存空间还在 只是访问权限没有了

常量

不能改变的量 就是常量
  • 字面常量
3.14;  - 浮点型常量
10;  - 整形常量
  • const修饰的常变量:不能修改具有常属性
const int a = 100; - 不能修改具有常属性(不能被改变的属性)
int a = 100;  可以修改

证明const修饰的 n 为变量

const int n = 100;  //常变量:具有常属性的变量
int arr[n] = {0}; //报错了 因为n为变量
arr[/*应该放常量*/] = { 0 };
  • define定义的标识符常量
#define MAX 100
MAX = 200;            报错  因为这是常量   变量才能改变
int arr[MAX] = {0};   正确
  • 枚举常量:一一列举
//性别
enum Sex
{
    //枚举的可能取值 - 枚举常量
    MALE=3, //常量  在初始值可以设置成3 、 7
    FEMALE=7,
    SECRET
};
int main()
{
    //enum Sex s = SECRET; //只能选择Sex中的常量
    printf("%d\n", MALE);//0
    printf("%d\n", FEMALE);//1
    printf("%d\n", SECRET);//2
    MALE = 4;//ERR - 不能改
    return 0;

字符串

表示一个字符
'a'   
' ' 空字符     
'ab' 错误

字符串:双引号引起来的

   "abcdef"; 字符串字面值
    char ch[10] = "abcdef";  初始化 abcdef \0 \0 \0 \0 
    %s - 打印字符串 
\0 - 字符串的结束标志
如果字符串初识化写满了  没有\0的位置 那么会一直打印随机值  直到遇到\0
        
    strlen - 求长度时
            \0不算长度
            头文件为 string.h

转义字符 - 转变意思

\t
\n
\0                                         0     6     5  
\ddd  - 8进制:的065转换成10进制:是53  (8^2 + 8^1 + 8^0)
                                乘法     0  +  48 +  5  =  53
                                在ASCLL里 53 代表 5
printf("%c\n",'\065'); // 5
printf("%c\n",'\x65'); // 5
\xdd - 16进制

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

注释

/**/    - C语言注释风格 - 不能嵌套
//      - C++注释风格

选择语句

if(判断语句)  这里注意 赋值 和 判断符号
{
        
}
else
{
        
}

循环语句

while(判断条件)
{
    条件++
}

函数

    int Add(int x, int y)
    {
        int z = 0;
        z = x + y;
        return z;
    }
    int main()
    {
        int sum1 = 0;
        int sum2 = 0;
        int sum = 0;
        //输入
        scanf("%d %d", &sum1, &sum2);
        //计算
        //sum = sum1 + sum2;
        sum = Add(sum1, sum2);
        
        //输出
        printf("%d\n", sum);
        return 0;
    }

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

数组{1,2,3,4,5,6,7,8,9,10}

元素的下标 0,1,2,3,4,5,6,7,8,9

int main()
{
    //char ch[5] = { 'a','b','c' };
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int i = 0;
    while (i<10)
    {
        printf("%d ", arr[i]);
        i++;
    }

    return 0;
}

操作符

    //+ - * / %
int main()
{
    //float - %f
    int a = 5 / 2; //  商2余1  //2
    float b = 5 / 2;           //2.0000  
    float c = 5 / 2.0;           //2.5000

    int d = 7 % 2; //1
    printf("%f\n", c);
    printf("%d\n", d);
    int e = 6;
    int f = e << 1;
    printf("%d\n", f);//12      1100
     printf("%d\n", e);//6        0110
    return 0;
}

初识C语言3

操作符

算数操作符
+  -  *  /  %
移位操作符
>> - 右移操作符
<< - 左移操作符
位操作符
& - 按2进制位与   - 有0为0
^ - 按2进制位异或 - 相同为0,相异为1
| - 按2进制位或   - 有1位1
赋值操作符
=  +=  -=  *=  /=  &=  ^=  |=  >>=  <<=

int main()
{
    int a = 0; //初始化
    
    a = 20; //赋值
    
    return 0;
}
单目操作符
操作符解释
!逻辑反操作
-负值
  • |正值
    & |取地址
    sizeof |计算字符的字节
    ~ |对一个数的二进制按位取反
    -- |前置、后置--
    ++ |前置、后置++
  • |间接访问操作符(解引用操作符)
    (类型) |强制类型转换
~ 操作符解释
负整数在计算机中存储的是 - 源码 (根据真实的值和符号位写出的2进制位)

源码 - 
反码 - 符号位不变,其他位按位取反
补码 - 反码+1

计算 - 补码
内存 - 补码
打印 - 源码
++
前置++:++a   -  先++再使用
后置++:a++   -  先使用再++
--  同理
强制类型转换 - 尽量避免
int a = (int)3.14; //3
关系操作符
  >   >=   <   <=   !=  ==
逻辑操作符
&& - 逻辑与 - 并且
|  - 逻辑或 - 或者
三目操作符
(表达式)(?是否为真)(结果1)( <<为真:为假>>)(结果2)

b = ((a == 5) ? (-6) : (6));
        1     ?   2  : 3    
 
结果:1成立则 为2
结果:1不成立则 为3
, - 逗号表达式  从左向右依次计算 
int main()
{
int a = 0;
int b = 3;
int c = -1;

int d = (a = b - 5, b = a + c, c = a + b, c -= 5);
b的结果是表达式为C的结果 
因为C是最后一个表达式

return 0;
}
下标引用操作符
 [] 
 int arr[] = {0};
函数调用操作符
()的操作数  1.函数名   2.参数1   3.参数2
tesrt(x,y);

常见关键字

关键字解释
auto自动变量(一般在int前面 因为常用所以省略不写了)
for用于循环(for(i = 0;i <10 i++);)
while循环体(while(i<10){i++;})
do配合while 组成do while
if意为如果(还有esif(或者如果))
else意为否则(配合if使用)
switch分支选择语句(配合case使用)(switch(整形和枚举类型,不能为浮点类型))
case作为switch的分支(类似if、esif)(case 常量整形:)
default作为switch的分支(类似else)
break停止,中断(终止循环、switch语句)
return返回值 (return 0;、return 1;)
goto跳转语句(可以跳转到任意语句处)
sizeof计算字符所占空间的大小 - 字节
scanf读取键盘输入(scanf("%d",&a);) 只读取到空格就结束读取
getchar在键盘上每次读取一个字符
putchar打印字符到屏幕
gets读取字符串 空格也能读
strlen计算字符串Add 的长度,直到空结束字符(\0),但不包括\0
const常属性(可以锁定变量,但变量还是变量)
continue用于循环(跳过一次循环后面的代码)
enum枚举(在初识C语言2>常量>枚举有详细介绍)
extern声明外部符号(extern int a;)
register寄存器 - 存储空间 - CPU(register int main = 100; 不能取地址 取地址是取内存的地址)
static1.修饰局部变量 2.修饰全局变量 3.修饰函数 (下面会讲)
struct结构体(存储多种类型,例如学生信息 姓名 性别 成绩)
typedef类型定义 - 起别名(typedef unsigned int uint;)
unsigned无符号位
union联合体(共用体)
ovlatilelinux (后面会讲)
define宏定义 类似三目操作符(#define MAX(X,Y) (X>Y?X:Y))
static
1.修饰局部变量:
改变了变量的生命周期  =  程序的生命周期  ,  但作用域没变  还是函数内部
调用函数中的局部变量  变量出作用域就会销毁
在函数中的局部变量前+static   变量出作用域不会销毁 
static int a = 100;
---------------------------------------------
2.修饰全局变量:
 extern - 声明外部符号

在全局变量前面 + static 
static int a = 100; 

全局变量:具有【外部】连接属性
static+全局变量:使【外部】=》【内部】  只能在所在的源文件使用

--------------------------------------------
3.修饰函数: 
函数可以跨文件使用
声明函数 - extern int  Add(int x,int y);

同上
static+函数:使【外部】=》【内部】  只能在所在的源文件使用
define
define 定义符号
#define MAX 100

define 定义宏
#define MAX(X,Y)  (X>Y?X:Y)
        宏名 参数   宏体

初识C语言4

指针

int main()
{
    //
    int a = 10;//像内存申请4个字节 放10  取名为a
    //sizeof (int) - 4
    //printf("%p\n",&a);//打印的十六进制
    int* pa = &a;//pa 是存放地址的变量  称为指针变量
    *pa = 20;//解引用操作符
    printf("%d\n", a);
    printf("%d\n", *pa);
    return 0; 
}

pa 是指针变量 存的是地址(指针)


指针变量的大小

系统大小
32位4字节(32个0bit/8=4byte)
64位8字节

类型32/64
char1byte
int4byte
*p4byte/8byte

结构体

struct - 结构体关键字
操作符用法
.结构体变量.成员名(*pa.name)
->结构指针->成员名(pa->name)

声明一个学生
struct Stu
{
    char name[20];
    int age;
    char sex[5];
    char id[12];
};
struct Book
{
    char name[20];
    int pricr;
    char author[20];
};
int main()
{

    struct Stu a1 = {"张三",20,"男","20201123"};
    struct Stu a2 = {"小三",20,"女","20201124"};
    struct Book b1 = {"C语言",9800,"鹏哥"};
    printf("名字:%s 年龄:%d 性别:%s 学号:%s\n", a1.name, a1.age, a1.sex, a1.id);//名字:张三 年龄:20 性别:男 学号:20201123
    struct Stu* pa = &a1;
    printf("名字:%s 年龄:%d 性别:%s 学号:%s\n", (*pa).name, (*pa).age, (*pa).sex, (*pa).id);//名字:张三 年龄:20 性别:男 学号:20201123
    printf("名字:%s 年龄:%d 性别:%s 学号:%s\n", pa->name, pa->age, pa->sex, pa->id);//名字:张三 年龄:20 性别:男 学号:20201123

    return 0;
}

一个内存单元 是一个字节(byte)
char - 1byte
int - 4byte

操作符

符号用法解释
%s打印字符串("a") — char arr[20] = {0};
%c打印字符('a') char
%d打印整形(5) int
%p打印地址(*pa)
%u打印无符号()
%ffloat
%lfdouble
最后修改:2025 年 06 月 24 日
如果觉得我的文章对你有用,请随意赞赏