#初识C语言3# o‘‘‘v‘‘‘o

1.数据类型(用来创建变量)

字节(内置的数据类型)                                                           (自定义数据类型) 

(一个汉字占两个字节,不能为char类型,应为char[ ])

char 字符型 1 0 ~ 255                                                                   struct    结构体

short 短整型 (short int) 2 0 ~ 65535                                         enum   枚举类型 

int 整型 4 0 ~ 2 ^ 32 -1                                                                  union    联合体

long 长整型 (long int) 4

long long 更长整型 8

float 浮点型 4

double 双精度浮点型 8

计算变量或者使用类型创建的变量的大小:

sizeof() 单位:字节

1字节 = 8 bit(最小单位)

1

1

1

1

1

1

1

1

char字符 ASCII 256种字符 = 8 比特位所表示的二进制的十进制数

1byte = 8bit

1KB = 1024byte

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

1PB = 1024TB

2.变量的分类

在代码块内部定义的变量为局部变量,在代码块外部定义的变量为全局变量

局部变量:

当一个局部变量不初始化的时候,他的值是随机值

全局变量:

全局变量不初始化,默认值为0

(局部变量与全局变量可以同名同时存在,当全局变量与局部变量重名冲突时,局部变量优先)

3.变量的声明周期和作用域

3-1.作用域

局部变量的作用域时变量所在的局部范围。

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

3-2生命周期(变量的创建到变量的销毁之间的一个时间段)

局部变量的生命周期:进入局部变量所在的范围,生命周期开始,出局部变量所在范围的时候,生命周期结束。

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

4.常量

字面常量 (100、3.14、'w'、"abc")

const修饰的常变量(常变量不能被修改,但本质上还是一个变量)

#define定义的标识符常量

枚举常量 enum();

5.数组(初始化可以不指定大小)

一组相同类型元素的集合 (c99中中支持变长数组,允许数组的元素个数用变量来指定)

int arr [ ] = {'A', 'B', 'C'};(数组初始化)

int arr[10] = {0};(数组不完全初始化,会把剩余的元素全部初始化成0)

(括号内应输入常量表达式来指定数组大小)(const修饰的常变量不能使用,因为他本质上还是变量)

数组的每一个元素都有一个下标,下标从0开始(用来访问元素)

6.字符串和转义字符

6 -1字符串放在字符数组中

char arr[] = "ABC"; strlen 的值为3(到\0停止)(没有把\0计算进去)

char arr[] = {'A', 'B', 'C'}; error strlen 的值为15(随机值)(找不到\0往后继续找,直到在内存中找到\0)

char arr[] = {'A', 'B', 'C',' \0'};('\0'是字符串的结束标志)

printf("%s\n", arr);

6-2转义字符                                                                       ??) -> ]

\? 在书写连续多个问号时使用防止他们被解析为三字母词 \' 用于表示字符常量 '

\" 表示一个字符串内部的 " \\ 表示一个反斜杠,防止被解释为一个转义字符

\ a警告字符,蜂鸣(响一下) \b 退格符

\f 进纸符 / 换页 \n 换行

\r 回车 \t 水平制表符

\v 垂直制表符 \ddd ddd表示1~3个八进制数字 \130X

\xdd dd表示两个十六进制数字 \x30 0 (\x30 算作一个字符) (\628 \62)

7.操作符

(c语言包含了非常丰富的操作符,甚至可以操作内存的数据,可以直接操作二进制位)

算数操作符

+ - * / %

/(两端都是整数执行整数除法,结果取整。只要出号两端有一个数是小数,执行高精度除法,结果为浮点型)

% (n % 2 可以判断奇数偶数)

移位操作符

<< / >>(二进制位左移或右移一位)

位操作符

& 按位与 (对应的二进制位同为1才为1,否则为0)

|按位或 (对应的二进制位同为0才为0,否则为1)

^按位异或(对应的二进制位相同为0,相异为1) 

赋值操作符

赋值

=

复合赋值

-=

+= ......

单目操作符 (只有一个操作数)

! 逻辑反操作(c语言中0表示为假,非0表示为真)

- + 正负值

& 取地址

sizeof 操作数的类型长度(以字节为单位)(不是函数而是操作符)

(计算的是变量或者类型所创建变量占据内存的大小--单位是字节)

~ 对一个数的二进制位按位取反

(负整数的二进制有原码、反码、补码,内存中存储的是补码)

-- 前置、后置--

++ 前置、后置++

* 间接访问操作符(解引用操作符)

(类型) 强制类型转换

关系操作符

>

>=

!= 用于测试"不相等"

== 用于测试"相等"

逻辑操作符

&& 逻辑与

|| 逻辑或

条件操作符

(exp1 ? exp2 : exp3)

逗号表达式

(exp1, exp2, exp3.....expN (从左向右依次计算,整个表达式的结果是最后一个表达式的结果)

下标引用、函数调用和结构成员

[ ] 下标引用操作符

( ) 函数调用操作符

int sum = Add(3, 5);

.      结构体成员引用  

->   结构体指针成员引用

8.关键字(define不是关键字 是 预处理指令)

Break   case    char   const    continue   defualt    do     double    else     num  

float   for    goto   if   int     long     return   short    sizeof    static  

switch typedef   void   Volatile  while

· Auto 自动 auto int a; 所有的局部变量都是自动变量 (自动创建自动回收)

·const 修饰变量,修饰指针(定义常变量)

·default 默认 / 缺省

· Register 寄存器变量(不能取地址),访问速度更快(建议作用)

寄存器(eax,ebx,ecx,edx,esp,ebp) 越往上速度越快,造价越高,空间越小

高速缓存 CPU(中央处理器)

内存 8/6G

硬盘 500G

网盘 2T

·(Signed)【省略】  变量 = 有符号数字

· Unsigned  变量  =  无符号数字

· Struct  结构体关键字

· union  联合体/共用体

· Typedef  类型定义  类型重定义(类型重命名)

· static   静态变量   修饰局部变量(改变了变量的类型)  使局部变量生命周期变长

(栈区存储 ->静态区存储)从而使得静态的局部变量出了自己的作用域也不会销毁

修饰全局变量  让静态的全局变量只能在自己所在的源文件中使用

修饰函数改变了函数的链接属性 (外部链接属性是指一个变量或函数在这个源文件定义,可以在其他源文件使用)

外部链接属性 = >  内部链接属性 (作用域变小了,声明周期不变) 需要搭配extern

· extern    声明外部符号  全局变量、全局函数可在其他源文件使用

9.注释

//

/*

/* (有缺陷不支持嵌套)

*/ 1 3 号会相互匹配 导致四号被无视了

*/ 3 4号之间的代码不会被注释掉

10.选择和循环语句语句

10-1.选择语句

if语句

switch语句

10-2.循环语句

for 语句

while语句

do while语句

内存

是一块比较大的存储空间

在使用时会划分出不同的功能区域

栈区域 存放局部变量

堆区 动态内存分配 malloc free calloc realloc

静态区 全局变量 静态变量

11.函数(定义如果在调用之后定义,要先声明)

main函数(主函数)

那么什么是函数呢

类比数学中的函数

f(x) = x + 1

这个函数具有求和的功能

C语言中把一些独立的功能也能够封装一个个的独立的函数

把函数想象成一个工厂

给他输入原材料

原材料在工厂中被加工(进行函数运算)成成品(返回结果)

12.#define 定义宏

#define ADD(X, Y) ((X) + (Y)) 定义宏不要吝啬括号,由于时替换属性容易出错

int a = 10;

int b = 20

int ret =ADD(a, b);

ret = 30;

13.内存(%p打印地址)

计算机程序的运行都是在内存中进行的

内存

内存单元地址

一个内存单元

0xFFFFFFFF

一个字节

0XFFFFFFFE

一个字节

一个字节

一个字节

14.指针(地址也称为指针)

地址存到变量 那么这个变量也称为指针变量

指针变量用来存放地址

int a = 10;

printf("%p\n", &a);

int* p = &a;(取地址取的是第一个字节的地址,取低地址)

(int 说明p时指向一个整型变量的,*时告诉我们p时指针变量)

*p(解引用操作符)(间接访问操作符)

通过p存放的地址,找到地址所指向的对象

指针变量有多大?------>地址的存放需要多大的空间?------>地址是如何产生的?地址是什么样的数据?

4byte 4byte(32个bit)

早期16位机器

当前32位、64位

32位 机器 —————> 32根地址线/数据线 ----> 2 ^ 32 个地址(32个0/1的组合数)

物理电线 - 通电 ->高电频率和低电频(1/0)

产生2 ^32个(地址个数)二进制序列作为内存编号 ----> 需要4个字节(byte)进行存储

000000000000000000000000000000000000

000000000000000000000000000000000001

000000000000000000000000000000000010

000000000000000000000000000000000011......

64位 机器 —————> 64根地址线 ---->2 ^ 64 个地址(64个0/1的组合数)

000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000001

000000000000000000000000000000000000000000000000000000000000000000000010

000000000000000000000000000000000000000000000000000000000000000000000011......

每个地址占64bit --> 8byte

VS2019

x86 是32位程序

管理4,294,967,296个byte空间 -->4个G

x64 是64位程序

管理4* 2 ^ 32 G的空间

15.结构体  

复杂对象

//结构体类型的定义

struct Stu

{

//结构体成员

char name[20]; // 数组类型没有初始化,数组大小一定要定义

int age;

char sex[10];

};

int main()

{

//创建结构体变量并初始化再进行使用

struct Stu zhangsan = {"张三", 20, "男"};

struct Stu lisi = {"李四", 24, "男"};

printf("%s %d %s\n", zhangsan.name, zhangsan.age, zhangsan.sex);

//通过指针访问结构体变量

struct Stu* p1 = &lisi;

printf("%s, %d, %s", (*p1).name, (*p1).age, (*p1).sex);

printf("%s, %d, %s", p1->name, p1->age, p1->sex);

}

. 结构体成员访问操作符

结构体变量.结构体成员

->结构体成员访问操作符

结构体指针->结构体成员

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值