文章前言:
学的太多 更新的太少了哈哈 总不能把学的忘记了 回顾知识 继续总结!
![aba480fe72bf41dfaa1037503931c4b0.gif](https://img-blog.csdnimg.cn/aba480fe72bf41dfaa1037503931c4b0.gif)
文章目录
一.#define定义常量和宏
二.内存
三.指针变量
(1)指针
(2)指针大小
一.#define定义常量和宏
我们知道#define可以定义常量 用#define定义的常量是真的常量 可以使用在数组里使用电动
这次学的是定义常量和宏
(1)//#define定义标识符常量
#include<stdio.h>
#define MAX 1000 //全局变量 常量定义MAX的值为1000
int main()
{
int a=MAX//只要识别到标识符MAX 自动替换为1000
return 0;
}
这是定义的标识符
(2)#define定义宏 //带参数
我们用宏的方式来求最大值
宏的定义和定义标识符很相似
代码
#include<stdio.h>
#define MAX(x,y) (x>y?x:y) //我们把MAX(x,y) 定义成(x>y?x:y)
int main()
{
int a=10;
int b=20;
int max=0;
int max=MAX(a,b) //现在max=(x>y?x:y)因为把MAX(x,y)定义成x>y?x:y)
printf("max=%d",max);
return 0;
}
#define MAX(x,y) (x>y?x:y) 我们把MAX(x,y) 定义成(x>y?x:y)
只要在代码里遇到MAX(x,y) 就替换为(x>y?x:y)
运用了一个三目操作符更简单效率更高
二.内存
指针是变量
内存:
内存是电脑上特别重要的存储器 计算器中所有程序的运行都是在内存中运行的。
为了有效的使用内存,就把内存划分成一个小小的内存单元,每个内存的单元大小是一个字节
为了能有效的访问每个内存单元,给每个内存单元进行了编号,这些编号被称为该内存单元的地址
如何产生地址?
计算机32位(二进制)
计算机有32根地址线/是数据线
正电和负电
1 0
00000000000000000000000000000000(二进制0)
00000000000000000000000000000001(二进制1)
00000000000000000000000000000010(二进制2)
.....
0111111111111111111111111111111111111
.....
1111111111111111111111111111111111111
总共有2^32个二进制序列
每一个内存单元的编号 有2^32个编号
一共有32位 每一位只有0和1两张可能性 所以是2^32
我们想要换算单位是2^32十进制实际上是33位数
因为100=10^2 10000=10^4
如果按照一个空间是一个比特位的话2^32换算下来是0.5G(500mb)
32个线产生2^32编号 如果一个编号对一个比特位 最终只能使用0.5G内存编号 不实用 所以要一个编号对应一个字节(8比特位)
每个房间住一个字节,也就是八个比特位
如果一个空间是一个字节 一个字节是8个比特位 所以内存大小是0.5*8=4G内存
合适!
在32位机器上 地址是32个二进制序列 把这个二进制序列存起来的话需要4个字节(32个比特位)
计算机64位
如果是64位机器就是64个比特位 需要8个字节存起来(8*8=64比特位)
理论讲完了 接下来看指针操作
三.指针变量
(1)指针
指针是变量!!!!!
#include<stdio.h>
int main()
{
int a=10; //4个字节
printf("%p",&a)//打印a的地址 地址:0019FFOC
return 0;
}
打印出地址0019FFOC
打印地址需要用%p
有一种变量是存放地址的——指针变量
#include<stdio.h>
int main()
{
int a=10; //把10存到a里面 申请了4个字节大小
int *p=&a; //int*是p的类型 把a的地址存到P里
*p=20; //通过*p来找到a里面的值 把它改成20 *p=a
printf("a=%d",a); //改谁的就打印谁
return 0;
}
需要注意的地方:
也可以改字符 用%c
int *p=&a; //int*是p的类型 把a的地址存到p里
*p=20; //通过*p来找到a里面的值 把它改成20 *p=a
*p ——解引用操作符
*p=20; &a=*p a=20
p是存a的地址 *p是找到a并改变a的值
(2)指针大小
32位4字节
64位8字节
int main()
{
int a=10;
int *p=&a;//*p等于什么类型 p就是什么类型
printf("%d",sizeof(p))//打印结果是4字节
return 0;
}
还是要说一下
int *p=&a; 存的类型就是p的类型
a的类型是int
p就是int
总结:
这些知识点需要好好理解 好好消化 反复回顾不能忘了
![1e7303f07dd1439b8a7a945c97d3000e.jpeg](https://img-blog.csdnimg.cn/1e7303f07dd1439b8a7a945c97d3000e.jpeg)