自学C语言(10)define定义常量和宏 内存 指针变量

2023-11-03

文章前言:

学的太多 更新的太少了哈哈 总不能把学的忘记了 回顾知识 继续总结!

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自学C语言(10)define定义常量和宏 内存 指针变量 的相关文章

随机推荐