【C语言】指针(1)--入门理解

目录

一、内存和地址

二、指针变量和地址

三、指针变量类型的意义


一、内存和地址

只要讲指针就离不开内存

因为指针就是访问内存的

计算上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数
据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何高效的管理呢?
其实也是把内存划分为⼀个个的内存单元,每个内存单元的大小取1个字节
计算机常见单位
bit - ⽐特位
byte - 字节
KB
MB
GB
TB
PB1byte = 8bit
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB

内存单元编号==地址==指针

二、指针变量和地址

CPU访问内存中的某个字节空间,必须知道这个字节空间在内存的什么位置,⽽因为内存中字节很多,所以需要给内存进⾏编址(就如同宿舍很多,需要给宿舍编号⼀样)。计算机中的编址,并不是把每个字节的地址记录下来,⽽是通过硬件设计完成的。
⾸先,必须理解,计算机内是有很多的硬件单元,⽽硬件单元是要互相协同⼯作的。所谓的协同,⾄少相互之间要能够进⾏数据传递。但是硬件与硬件之间是互相独⽴的,那么如何通信呢?答案很简单,⽤"线"连起来。⽽CPU和内存之间也是有⼤量的数据交互的,所以,两者必须也⽤线连起来。不过,我们今天关⼼⼀组线,叫做地址总线。
32位机器有32根地址总线, 每根线只有两态,表⽰0,1【电脉冲有⽆】,那么 ⼀根线,就能表⽰2种含义,2根线就能表⽰4种含义,依次类推。32根地址线,就能表⽰2^32种含义,每⼀种含义都代表⼀个地址。地址信息被下达给内存,在内存上,就可以找到该地址对应的数据,将数据在通过数据总线传⼊CPU内寄存器。
int main()
{
int a = 10;//创建变量的本质是向内存申请一块空间,为a申请4个字节的空间return 0;
}

指针变量和解应用操作符

int main()
{int a = 10;//&a --- &取地址操作符//& 单目操作符printf("%p\n",&a);return 0;
}
//指针--地址
//指针变量--存放地址的变量int main()
{int a = 10;//&a --- &取地址操作符//& 单目操作符//printf("%p\n",&a);int* p = &a;//p是一个变量(指针变量),是一块空间//编号-地址-指针//int说明p指向对象是int类型的//*在说明p是指针变量
return 0;
}
int main()
{char ch = 'w';char* pc = &ch;return 0;
}
int main()
{int a =10;int * p= &a;*p =0;//* -解引用操作符(间接访问操作符)//a =0;】//*&a = 0;//a = 0
printf("%d",a);//0?return 0;
}

指针变量的大小

32位机器假设有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或者0,那我们把32根地址线产⽣的2进制序列当做⼀个地址,那么⼀个地址就是32个bit位,需要4 个字节才能存储。
如果指针变量是⽤来存放地址的,那么指针变的⼤⼩就得是4个字节的空间才可以。同理64位器,假设有64根地址线,⼀个地址就是64个⼆进制位组成的⼆进制序列,存储起来就需要8个字节的空间,指针变的⼤⼩就是8个字节。
指针变量 - 存放地址的
                  地址产生:地址线上传输的
                   32根地址线 ——>地址是:32个0/1组成的二进制序列
                   要储存这样的地址:32bit位的空间 ==4个字节
int main(){printf("%zd\n", sizeof(char *));printf("%zd\n", sizeof(short *));printf("%zd\n", sizeof(int *));printf("%zd\n", sizeof(double *));return 0;}

结论:
32位平台下地址是32个bit位,指针变量⼤⼩是4个字节
64位平台下地址是64个bit位,指针变量⼤⼩是8个字节
注意指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,⼤⼩都是相同的。

三、指针变量类型的意义

指针类型决定了指针进行解应用操作符的时候访问几个字节,也就是决定指针的权限

int main()
{ int a = 0x11223344;int * pa = &a;*pa =0;return 0;
}

//代码1
#include <stdio.h>
int main()
{int n = 0x11223344;int *pi = &n; *pi = 0; return 0;
//代码2
#include <stdio.h>
int main()
{int n = 0x11223344;char *pc = (char *)&n;*pc = 0;return 0;
}
调试我们可以看到,代码1会将n的4个字节全部改为0,但是代码2只是将n的第⼀个字节改为0。
结论:指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。
⽐如: char* 的指针解引⽤就只能访问⼀个字节,⽽ int* 的指针的解引⽤就能访问四个字节。

指针+-整数

int main()
{int a =10;int *pa = &a;char* pc = &a;printf("pa=%p\n",pa);printf("pa+1 = %p\n",pa+1);printf("pc = %p\n",pc);printf("pc+1 = %p\n",pc+1);return 0;
}

指针类型决定了指针进行+1,-1的时候,一次走远的距离

int * +1 --->走4个字节(整型大小)

char* +1--->走了1个字节(字符大小)

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

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

相关文章

PY32F030高性能单片机,主频高达48M,最大64 KB 闪存,8 KB SRAM

PY32F030是普冉的一颗32位高性能MCU&#xff0c;采用32 位 ARM Cortex-M0 内核&#xff0c;高达16~64 Kbytes Flash 和 2~8 Kbytes SRAM 存储器&#xff0c;最高 48 MHz 工作频率。PY32F030 单片机的工作温度范围为 -40 ~ 105 C&#xff0c;工作电压范围为1.7 ~ 5.5 V&#xff…

多语言版在线出租车预订完整源码+用户应用程序+管理员 Laravel 面板+ 司机应用程序最新版源码

源码带PHP后台客户端源码 Flutter 是 Google 开发的一款开源移动应用开发 SDK。它用于开发 Android 和 iOS 应用&#xff0c;也是为 Google Fuchsia 创建应用的主要方法。Flutter 小部件整合了所有关键的平台差异&#xff0c;例如滚动、导航、图标和字体&#xff0c;可在 iOS 和…

DevOps实战:使用GitLab+Jenkins+Kubernetes(k8s)建立CI_CD解决方案

一.系统环境 本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。 服务器版本docker软件版本Kubernetes(k8s)集群版本CPU架构CentOS Linux release 7.4.1708 (Core)Docker version 20.10.12v1.21.9x86_64CI/CD解决方案架构图:CI/CD解决方案架构图描述:程序员写好代码之…

ASP.NET MVC-razor编写-2-svg中使用js+添加事件监听

环境&#xff1a;win10 效果 初始状态&#xff1a; 鼠标移入某个text&#xff08;比如KS primer&#xff09;时&#xff0c;text和连接的线条与箭头都变色&#xff1a; 鼠标移出时回复正常。 如果是移入另一种红色的text&#xff08;比如Cell Sceening Tag&#xff09;&…

创建本地仓库

一、新建挂载目录 二、将挂载本地镜像挂载到目录 三、配置yum仓库 一、新建挂载目录 mkdir /BenDiCangKu 二、将挂载本地镜像挂载到目录 1、先连接本地光盘 2、挂载光盘 mount /dev/sr0 /BenDiCangKu 3、查看挂载 由此可见挂载成功 三、配置yum仓库 1、新建yum仓库文件…

php简单商城小程序系统源码

&#x1f6cd;️【简单商城小程序】&#x1f6cd;️ &#x1f680;一键开启&#xff0c;商城搭建新体验&#x1f680; 你还在为繁琐的商城搭建流程头疼吗&#xff1f;现在&#xff0c;有了简单商城系统小程序&#xff0c;一切变得轻松又快捷&#xff01;无需复杂的编程知识&a…

构建Android studio版的CarSystemUI工程时因为包名一致导致BuildConfig问题

项目场景&#xff1a; 公司计划开发杰发AC8025-Android 12版本车载平台&#xff0c;前期预研需要构建Android studio版的CarSystemUI工程 问题描述 AAOS车载项目里面的CarSystemUI源码默认无Android studio版本&#xff0c;为了后期快速开发调试需要构建Android studio能直接…

STM32基础知识

一.STM32概述 第一款STM32单片机发布的时间为2007年6月11日。由意法半导体&#xff08;ST&#xff09;公司推出&#xff0c;是STM32系列中的首款产品&#xff0c;具体型号为STM32F1&#xff0c;它是一款基于Cortex-M内核的32位微控制器&#xff08;MCU&#xff09;。 STM32F1…

2024年【湖北省安全员-C证】考试资料及湖北省安全员-C证考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 湖北省安全员-C证考试资料是安全生产模拟考试一点通生成的&#xff0c;湖北省安全员-C证证模拟考试题库是根据湖北省安全员-C证最新版教材汇编出湖北省安全员-C证仿真模拟考试。2024年【湖北省安全员-C证】考试资料及…

JS+CSS+HTML项目-中国国家图书馆

页面做的不多&#xff0c;CSS效果请看哔哩哔哩

英智玲珑一体机在律所能做什么

只要不开庭&#xff0c;学习就不能停 好的律师是法律知识的百科全书 要精通、全面理解各类型的法律 还要不断学习更新的条例释义 一天即使工作24小时 也有忙不完的文书起草&#xff0c;资料核对&#xff0c;案情分析整理 有了英智玲珑一体机&#xff0c;这些都不是难题&am…

一键式创建GTest测试平台

适用于C GTest测试平台搭建。直接上python脚本。 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import argparse import os import platform import subprocess from xml.etree import ElementTree as ETdefault_root_path "d:\\test\\UTtest"class DeveloperTe…

四款主流电脑监控软件(电脑监控软件主要优势)

在现代企业环境中&#xff0c;确保员工的工作效率和企业信息的安全成为了管理者的重要任务。电脑监控软件作为一种有效的管理工具&#xff0c;能够帮助企业实现这些目标。固信电脑监控软件在这方面表现尤为出色&#xff0c;本文将详细介绍固信电脑监控软件的优势及其主要功能&a…

《NATURE丨使用 AlphaFold 3 准确预测生物分子相互作用的结构》

NATURE丨使用 AlphaFold 3 准确预测生物分子相互作用的结构 注意&#xff01;&#xff1a;本文创作仅根据个人理解和网络信息&#xff0c;如有错误恳请指正&#xff01;谢谢&#xff01; 大家好&#xff0c;今天分享的文献是2024年5月发表在Nature上的“ Accurate structure …

(仿真+报告+源码)基于51单片机的温湿度监测系统

&#xff08;仿真报告源码&#xff09;基于51单片机的温湿度监测系统 付费后获得百度网盘链接&#xff0c;网盘链接在最后&#xff0c;有问题私信哦~~~ 一.系统简介 该系统由单片机、温湿度传感器器、液晶显示器以及浇水控制电路组成。该系统使用AT89C51单片机作为控制核心&…

windows上安装Frida环境

python安装 下载地址 Python Release Python 3.12.4 | Python.org python安装好后&#xff0c;使用如下命令安装frida客户端 pip install frida-tools 使用frida --version 查看frida版本 安装手机模拟器&#xff08;雷电模拟器&#xff09; 我的版本是4.0.61 查看CPU架构 adb …

一文了解常见DNS结构

很多企业忽略DNS这个关键的组件&#xff0c;而当DNS出现问题是&#xff0c;就会导致网站无法访问、电子邮件无法发送和接收&#xff0c;从而影响到企业的正常运行。而网络团队成员如果想要处理DNS问题就必须对所在网络的DNS架构有一定的理解。 主DNS服务器&#xff1a; 主DNS服…

设计模式探索:单例模式

1. 什么是单例模式? 定义: 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一种全局访问点以访问该实例。常见的场景包括身份证号码、政府等需要唯一实例的情况。 单例模式通常用于那些需要在应用程序中仅存在一个实例的情况,例如配置管理器、线程池、数据…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【20】认证服务04—SSO单点登录

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【20】认证服务04—SSO单点登录 xxl-sso多系统-单点登录单点登录流程原理图单点登录流程简单实现参考 xxl-sso https://gitee.com/xuxueli0323/xxl-sso xxl-sso是开源的一个单点登录框架 …

智慧交通运行监测与应急指挥中心方案

建设目标 建立感知层数据的实时采集以及数据处理&#xff0c;实现监测预警自动化和智能化&#xff1b;推动交通运输数据资源开放共享&#xff0c;打破数据资源壁垒&#xff0c;与城市各部门数据建立共享交换机制&#xff0c;实现应急指挥的协同化&#xff1b;充分运用大数据、互…