【C语言】指针基础知识(一)

af3be47e1d3f4ecb9d2eddbe236b0e45.png

计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中。

一,内存和地址

内存被分为一个个单元,一个内存单元的大小是一个字节。

内存单元的编号(可以理解为门牌号) == 地址 == 指针
编址:如何找内存空间(找门牌号)

56ed76c333844401a7371cc18765d943.png

控制总线:发信息———要读取目标信息

地址总线:拿信息———拿取到目标信息

数据总线:传信息———从内存向CPU传信息

二,指针变量和地址

1,简单理解:

int main()
{
    int a = 0;

    return 0;
}

表层意思:创建一个变量a,并赋值为10。

深层意思:在内存上申请4个内存的空间,存放10。

2,取地址:

int main()
{
    int a = 10;
    printf("%p", &a);

    return 0;
}

运行结果:

d0104b6abd5d4abcb0346306f04667a6.png

一个整型的大小为四个字节,每个字节都有它所对应的地址。但是打印整型地址时并不是四个字节都打印,而是只打印四个地址里的第一个地址(地址较小的那个)。

3,指针变量:

地址可以用指针变量存放起来。也就是说,指针可以用指针变量存放起来。
int *pa=&a;
pa为指针变量,int*为变量的类型。
注意!!!我们口头所说的指针一般是指针变量。
通过地址可以找到a,也可以说是pa指向了a的起始位置。
2321b7afe3d948d895325f5b92b3a277.png
int*中的int和*分别代表什么?
*      说明pa是指针变量的意思
int    说明pa指向的对象的类型是int类型

4,解引用操作符

地址有了,该怎么用?也就是说,有了变量(pa),该怎么用?

这样用:

int main()
{
    int a = 10;
    printf("%p\n", &a);
    int* pa = &a;
    *pa = 20;

    return 0;
}

*pa为解引用操作符,意思是:通过pa里面的地址找到它所指向的值,也就是a。也就是说,*pa就是a。

代码中*pa=20的意思就是a=20。

5,指针变量的大小

指针变量是专门来存放地址的,无论是什么,只要在指针变量里,它都是地址。

指针变量的大小有多大?取决于一个地址的存放需要多大的空间。

验证:

#include<stdio.h>
int main()
{
    char* a = NULL;
    int*  b = NULL;
    printf("%zd\n", sizeof(a));
    printf("%zd\n", sizeof(b));
    return 0;
}

运行结果:

29a2e3e52f59450bb81406d2632bf5b0.png

注:X86是32位机器,X64是64位机器

 

32位平台下地址是32个bit位,指针变量⼤⼩是4个字节
64位平台下地址是64个bit位,指针变量⼤⼩是8个字节
指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,大小都是相同的。
注:不同环境会带来不同的影响,例如:指针变量大小的区别

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Data访问Elasticsearch----Elasticsearch存储库Repositories

Spring Data访问Elasticsearch----Elasticsearch存储库Repositories 一、自动创建具有相应映射的索引二、存储库方法的注解2.1 Highlight2.2 SourceFilters 三、基于注解的配置四、Spring命名空间Namespace 一、自动创建具有相应映射的索引 二、存储库方法的注解 2.1 Highlig…

2024年值得创作者关注的十大AI动画创新平台

别提找大型工作室制作动画了。如今,AI平台让我们就可以轻松制作动画。从简单的文本生动画功能到复杂的角色动作,这些平台为各种类型的创作者提供了不同的功能。 AI已经有了长足的发展,现在它可以理解复杂的人类动作和艺术意图,将简单的输入转化成丰富而详细的动画。 下面…

国产数据库研究-2024

作为提升自我能力的一部分&#xff0c;计划在2024年4-9月份&#xff0c;逐步梳理完善当前流行的国产数据库清单及各数据库能力&#xff0c;提高自己对各类数据库的掌握程度&#xff0c;做一名合格的DBA。 本文将通过一下方式进行各类数据库资料梳理及对比。 主要待了解的数据…

【前端Vue】Vue3+Pinia小兔鲜电商项目第1篇:认识Vue3,1. Vue3组合式API体验【附代码文档】

全套笔记资料代码移步&#xff1a; 前往gitee仓库查看 感兴趣的小伙伴可以自取哦&#xff0c;欢迎大家点赞转发~ 全套教程部分目录&#xff1a; 部分文件图片&#xff1a; 认识Vue3 1. Vue3组合式API体验 通过 Counter 案例 体验Vue3新引入的组合式API vue <script> ex…

Makefile文件编译c++源码入门教程

Makefile相关依赖 MinGW MinGW&#xff08;Minimalist GNU for Windows&#xff09;是一个用于Windows系统的开源软件开发工具集&#xff0c;它允许你在Windows平台上使用GNU工具集来编译、链接和运行原生Windows程序。MinGW提供了GCC&#xff08;GNU Compiler Collection&am…

Android 调试打印对应的调用堆栈

在平时的开发调试的时候&#xff0c;经常碰到需要打印JAVA、Native C、kernel的代码调用关系。这里做一下记录 Jave堆栈打印 使用android.util.Log类进行打印 /*** Send a {link #DEBUG} log message and log the exception.* param tag Used to identify the source of a lo…

AJAX学习(四)

版权声明 本文章来源于B站上的某马课程&#xff0c;由本人整理&#xff0c;仅供学习交流使用。如涉及侵权问题&#xff0c;请立即与本人联系&#xff0c;本人将积极配合删除相关内容。感谢理解和支持&#xff0c;本人致力于维护原创作品的权益&#xff0c;共同营造一个尊重知识…

聊聊Python都能做些什么

文章目录 一、Python简介二、Python都能做些什么1. Web开发2. 数据分析和人工智能3. 自动化运维和测试4. 网络爬虫5. 金融科技 三、Python开源库都有哪些1. Web开发2. 数据分析和科学计算3. 机器学习和深度学习4. 网络爬虫5. 自动化和测试6. 其他常用库 四、相关链接 一、Pytho…

C++内存分布与动态内存管理

文章目录 :dizzy: C/C内存分布:dizzy:C语言中动态内存管理方式  :sparkles:malloc   :sparkles:calloc  :sparkles:reallocfree :dizzy:C语言中动态内存管理方式  :sparkles:new和delete操作内置类型  :sparkles:new和delete操作自定义类型 :dizzy:operator new与ope…

C语言自学笔记13----C语言指针与函数

C 语言指针与函数 在C语言编程中&#xff0c;也可以将地址作为参数传递给函数。 要在函数定义中接受这些地址&#xff0c;我们可以使用指针。这是因为指针用于存储地址。让我们举个实例&#xff1a; 示例&#xff1a;通过引用致电 #include <stdio.h> void swap(int n1, …

数星星 刷题笔记 (树状数组)

依题意 要求每个点 x, y 的左下方有多少个星星 又因为 是按照y从小到大 给出的 所以 我们在计算个数的时候是按照y一层层变大来遍历的 因此我们在处理每一个点的时候 只需要看一下 当前的点有多少个点的x值比当前点小即可 树状数组的 操作模板 P3374 【模板】树…

rsa数据加密无大小限制——golang实现

由于rsa加密需要公钥长度大于消息长度&#xff0c;消息太长时经常会报错Message too long for RSA 采用分块的方法&#xff0c;将消息分成更小的块&#xff0c;解决这个问题 package xrsa import ("encoding/pem""encoding/base64""crypto/x509"…

动态规划题目集一(代码 注解)

目录 介绍&#xff1a; 题目一: 题目二&#xff1a; 题目三&#xff1a; 题目四&#xff1a; 题目五&#xff1a; 题目六&#xff1a; 题目七&#xff1a; 题目八&#xff1a; 题目九&#xff1a; 介绍&#xff1a; 动态规划是一种算法设计技术&#xff0c;用于解决具有重叠…

水泵房远程监控物联网系统

随着物联网技术的快速发展&#xff0c;越来越多的行业开始利用物联网技术实现设备的远程监控与管理。水泵房作为城市供水系统的重要组成部分&#xff0c;其运行状态的监控与管理至关重要。HiWoo Cloud作为专业的物联网云服务平台&#xff0c;为水泵房远程监控提供了高效、稳定、…

音乐播放器-C#实现

音乐播放器-C#实现 目录 一、 代码介绍 二、 音乐播放器-C#实现 三、 音乐播放器-C#实现 四、 音乐播放器-C#实现 五、 音乐播放器-C#实现 代码介绍 代码中使用了.NET框架中的System.Media命名空间来处理音频文件的播放和控制。这段代码创建了一个简单的音乐播放器界…

Java访问数据库(重点:SpringBoot整合Mybatis)

目录 一、通过JDBC访问数据库1、思路2、示例3、思考 二、通过ORM框架访问数据库&#xff08;主要是Mybatis&#xff09;1、示例1.1 配置1.2 SQL写在xxxMapper.xml中&#xff1a;mapper/UserMapper.xml1.3 xxxMapper.xml对应的xxxMapper接口&#xff08;Application通过该接口访…

C#设计原则

学习设计原则是学习设计模式的基础。在实际的开发过程中&#xff0c;并不是一定要求所有的代码都遵循设计原则&#xff0c;而是要综合考虑人力、成本、时间、质量&#xff0c;不刻意追求完美&#xff0c;要在适当的场景遵循设计原则。 这体现的是一种平衡取舍&#xff0c;可以…

SRE运维揭秘: 企业生产中运维监控的真相

大家好&#xff0c;我是博哥爱运维&#xff0c;有着十年SRE运维开发经验&#xff0c;从事过全球多个主流云平台的服务架构设计及自动化运维开发工作&#xff0c;在企业中基于gitlab和k8s从零设计过完整的一套CICD流水线架构&#xff0c;曾用shell开发过运维堡垒机系统&#xff…

磁盘未格式化,数据恢复有妙招

一、初遇磁盘未格式化&#xff0c;惊慌失措 在日常生活和工作中&#xff0c;我们经常会使用各种存储设备来保存重要的文件和数据。然而&#xff0c;有时当我们尝试访问这些存储设备时&#xff0c;却会突然遇到一个令人头痛的问题——磁盘未格式化。这个突如其来的提示让我们措…

虚拟函数和普通函数的区别?内联函数和构造函数能否成为虚拟函数?

虚拟函数和普通函数的区别主要在于它们的调用方式。当一个类中有虚拟函数时&#xff0c;编译器会为该类创建一个虚函数表&#xff08;vtable&#xff09;&#xff0c;这个表中存储了该类中所有虚拟函数的地址。在运行时&#xff0c;通过基类的指针或引用调用派生类中的函数时&a…