15-指针

15-指针

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元每个内存单元大小1 个字节为了能够有效的访问内存的每个单元,就给内存单元进行了编号这些编号该内存单元地址

【注】内存属于空间!!!

【举例】内存使用现实生活中的空间有很多相似的地方。现实生活中一个地方,当描述xxx省xxx市xxx区xxx大学xx楼这样的地址能精确找到一个地方。对于内存也一样的。内存是一个很大的空间。

image-20241206113718671

一、内存的编号

【问】内存怎么编号的?

【答】32 位机器,是拥有 32 根地址线。而地址线是物理的线物理线可通电,即通正电就是 1,通负电就是 0。此时将电信号转换成数字信号1 和 0 组成的二进制序列),这些二进制序列编号就被称为内存的地址。同样 64 位机器,也是一样

image-20241206134332759

二、内存单元的空间

【问】一个内存单元多大空间?

【答】32 位机器,可以管理 232 个内存单元。假设一个内存单元1 bit,即总共可管理 232 bit = 4,294,967,296bit4,294,967,296bit / 8 = 536,870,912Byte536,870,912Byte / 1024 = 524,288KB524,288KB / 1024 = 512MB512MB / 1024 = 0.5GB

【注】最终:一个内存单元是一个字节,然后分配地址的!!!

三、例程

【注】变量所占的字节在取地址时,是所占的字节的第一个地址!!!

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	int a = 10;		//a 在内存中要分配 4个字节 的空间 存放 10

	printf("%p\n", &a);		//%p是打印地址的格式

	return 0;
}

image-20241206144529121

四、指针变量

指针变量是用来存放地址的(存放的是别的变量地址)。

1、定义方式

[类型]* [变量1] = &[变量2]

2、&

取址符,用来获取 [变量2] 的地址

3、指针变量

*说明 [变量1] 是指针变量

4、类型

说明 [变量1] 执行的是 [变量2] 的 [类型]。

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	int a = 10;		//a 在内存中要分配 4个字节 的空间 存放 10
    
    /*
     * * 说明 pa 是指针变量
     * int 说明 pa 执行的对象是 int 类型的
     */
    int* pa = &a;		//pa 是用来存放地址的,在 C语言 中 pa 叫指针变量
    printf("%p\n", pa);		//%p是打印地址的格式
    
    char ch = 'w';
    char* pc = &ch;
    printf("%p\n", pc);		//%p是打印地址的格式

	return 0;
}

image-20241206151007793

5、*

解引用操作符

*[变量1] :通过 [变量1] 的地址找到 [变量2],并且获取或者改变 [变量2] 值。

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
    int a = 10;		//a 在内存中要分配 4个字节 的空间 存放 10

    /*
     * * 说明 pa 是指针变量
     * int 说明 pa 执行的对象是 int 类型的
     */
    int* pa = &a;		//pa 是用来存放地址的,在 C语言 中 pa 叫指针变量

    /*
     * * 解引用操作符,*pa 就是通过 pa 里面的地址,找到 a
     */
    *pa = 20;
    printf("%d\n", a);		//%p是打印地址的格式

    return 0;
}

image-20241206152647989

6、例程 & 解析

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
    int a = 10;		//a 在内存中要分配 4个字节 的空间 存放 10

    /*
     * * 说明 pa 是指针变量
     * int 说明 pa 执行的对象是 int 类型的
     */
    int* pa = &a;		//pa 是用来存放地址的,在 C语言 中 pa 叫指针变量

    *pa = 20;
    printf("%d\n", a);		//%p是打印地址的格式

    return 0;
}

image-20241206160134136

image-20241206155756308

【注】指针就是地址!!!

五、指针变量的大小

指针是用来存储地址的,指针需要多大空间取决地址的存储需要多大空间

32位机器 —— 32bit —— 4Byte

64位机器 —— 64bit —— 8Byte

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	printf("%d\n", sizeof(char*));			//	8(字节)
	printf("%d\n", sizeof(short*));			//	8(字节)
	printf("%d\n", sizeof(int*));			//	8(字节)
	printf("%d\n", sizeof(long*));			//	8(字节)
	printf("%d\n", sizeof(long long*));		//	8(字节)
	printf("%d\n", sizeof(float*));			//	8(字节)
	printf("%d\n", sizeof(double*));		//	8(字节)
	printf("%d\n", sizeof(long double*));	//	8(字节)

	return 0;
}

image-20241206165837855

posted @   AK47YHAO  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示