C语言-指针的基本知识(上)

一、关于内存

存储器:存储数据器件

外存

外存又叫外部存储器,长期存放数据,掉电不丢失数据

常见的外存设备:硬盘、flash、rom、u盘、光盘、磁带

内存

内存又叫内部存储器,暂时存放数据,掉电数据丢失

常见的内存设备:ram、DDR

物理内存:实实在在存在的存储设备

虚拟内存:操作系统虚拟出来的内存,当一个进程被创建的时候,或者程序运行的时候都会分配虚拟内存,虚拟内存和物理内存之间存在映射关系

操作系统会在物理内存和虚拟内存之间做映射。

在32位系统下,每个进程(运行着的程序)的寻址范围是4G,0x00 00 00 00 ~0xff ff ff ff

其中有3G是用户空间,有1G是内核空间。

在写应用程序的,咱们看到的都是虚拟地址。

在运行程序的时候,操作系统会将 虚拟内存进行分区。

1.堆

在动态申请内存的时候,在堆里开辟内存。

2.栈

主要存放局部变量(在函数内部,或复合语句内部定义的变量)。

3.静态全局区

1):未初始化的静态全局区

静态变量(定义的时候,前面加static修饰),或全局变量 ,没有初始化的存在此区 。

2):初始化的静态全局区

全局变量、静态变量,赋过初值的,存放在此区

4.代码区

存放咱们的程序代码

5.文字常量区

存放常量的。

内存以字节为单位来存储数据的,咱们可以将程序中的虚拟寻址空间,看成一个很大的一维的字符数组

本章所接触的内容,涉及到的内存都是虚拟内存,更准确来说是虚拟内存的用户空间

二、指针的相关概念

操作系统给每个存储单元分配了一个编号,从0x00 00 00 00 ~0xff ff ff ff

这个编号咱们称之为地址

指针就是地址

指针变量:是个变量,是个指针变量,即这个变量用来存放一个地址编号

在32位平台下,地址总线是32位的,所以地址是32位编号,所以指针变量是32位的即4个字节。

注意:

1:无论什么类型的地址,都是存储单元的编号,在32位平台下都是4个字节。

即任何类型的指针变量都是4个字节大小

2:对应类型的指针变量,只能存放对应类型的变量的地址

举例:整型的指针变量,只能存放整型变量的地址

扩展

字符变量 char ch; ch占1个字节,它有一个地址编号,这个地址编号就是ch的地址。整型变量 int a; a占4个字节,它占有4个字节的存储单元,有4个地址编号。

Int a=0x00 00 23 4f

Int a=0x00 00 23 4f

三、指针的定义方法

1.简单的指针

数据类型 * 指针变量名;

int * p;//定义了一个指针变量p

在 定义指针变量的时候 * 是用来修饰变量的,说明变量p是个指针变量。

变量名是 p

2.关于指针的运算符

& 取地址 、 *取值&:获取一个变量的地址

*:在定义一个指针变量时,起到标识作用,标识定义的是一个指针变量。除此之外其他地方都表示获取一个指针变量保存的地址里面的内容。

1 #include <stdio.h>

2

3 int main(int argc, char *argv[])

4 {

5 //定义一个普通变量

6 int a = 100;

7 //定义一个指针变量

8 int *p;

9

10 //给指针变量赋值

11 //a的地址保存在p

12 p = &a;

13

14 printf("a = %d %d\n", a, *p);

15 printf("&a = %p %p\n", &a, p);

16

17 return 0;

18 }

扩展:如果在一行中定义多个指针变量,每个指针变量前面都需要加*来修饰

int *p,*q;//定义了两个整型的指针变量p和q

int * p,q;//定义了一个整型指针变量p,和整型的变量q

3、指针大小

在32位系统下,所有类型的指针都是4个字节

因为不管地址内的空间多大,但是地址编号的长度是一样的,所以在32位操作系统中,地址都是四个字节

1 #include <stdio.h>

2

3 int main(int argc, char *argv[])

4 {

5 char *a;

6 short *b;

7 int *c;

8 long *d;

9 float *e;

10 double *f;

11

12 printf("sizeof(a) = %d\n", sizeof(a));

13 printf("sizeof(b) = %d\n", sizeof(b));

14 printf("sizeof(c) = %d\n", sizeof(c));

15 printf("sizeof(d) = %d\n", sizeof(d));

16 printf("sizeof(e) = %d\n", sizeof(e));

17 printf("sizeof(f) = %d\n", sizeof(f));

18

19 return 0;

20 }

21

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

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

相关文章

Android 水印效果

Android 水印效果 本文主要介绍下android 中水印的实现效果. 实现的方式有多种,就不一一赘述了, 本文就是通过自定义drawable来实现水印. 不多说,直接上代码吧: import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; i…

freeRTOS

1.新建一个无FreeRTOS的工程&#xff0c;取名为Motor 根据风扇模块PDF原理图和操作文档让风扇转动 1.新建一个包含FreeRTOS的工程&#xff0c;取名为Semaphore 2.根据信号量的文档先预习信号量的创建步骤和API函数 3.完成使用信号量访问共享资源的实验 具体步骤&#xff1a; 创…

Unity制作右键菜单(自适应分辨率)

一、需求 右键触发打开菜单&#xff0c;左键在内部可选择选项&#xff0c;左键单击菜单范围外关闭。难点在于屏幕坐标系&#xff0c;鼠标位置&#xff0c;UI位置之间的关系。 二、理论 前置知识&#xff1a; unity中&#xff0c;用RectTransform对象的position.x和position.y表…

vscode连不上虚拟机,一直密码错误

最近在做毕设&#xff0c;但是vscode使用连接不上虚拟机&#xff0c;我以为是网络配置的问题&#xff0c;一顿查阅没找到原因。 后来查了一下ssh的日志&#xff0c;发现ssh有消息&#xff0c;但是也提示密码错误。 没找到密码配置格式什么的&#xff0c;经查看sshd配置文件发现…

C语言第十二弹--扫雷

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 扫雷 1、扫雷游戏分析和设计 1.1、扫雷游戏的功能说明 1.2 游戏的分析和设计 1.2.1、数据结构的分析 1.2.2、文件结构设计 2、扫雷游戏的结构分析 2.1、用…

自动化软件开发常用代码分享!

随着科技的发展&#xff0c;自动化软件开发已经成为现代企业不可或缺的一部分&#xff0c;自动化软件可以帮助企业提高生产效率、降低成本、优化业务流程。 而在自动化软件开发中&#xff0c;代码是实现这些功能的基础&#xff0c;本文将分享一些常用的自动化软件开发代码&…

【JSON2WEB】03 go的模板包html/template的使用

Go text/template 是 Go 语言标准库中的一个模板引擎&#xff0c;用于生成文本输出。它使用类似于 HTML 的模板语言&#xff0c;可以将数据和模板结合起来&#xff0c;生成最终的文本输出。 Go html/template包实现了数据驱动的模板&#xff0c;用于生成可防止代码注入的安全的…

计算机网络·网络层

网络层 网络层提供的两种服务 争论&#xff1a; 网络层应该向运输层提供怎样的服务&#xff1f;面向连接还是无连接&#xff1f; 在计算机通信中&#xff0c;可靠交付应当由谁来负责&#xff1f;是网络还是端系统&#xff1f; 2 种观点&#xff1a; 面向连接的可靠交付。 无连…

macOS与Linux相互投屏的方法

很多人面对跨系统投屏都望而却步。其实只要找对方法&#xff0c;两台不同系统的电脑也可以相互投屏。 今天就来看看Linux系统和macOS系统如何相互投屏&#xff01; 第一步&#xff0c;将Linux系统电脑和macOS系统电脑连接同一网络。假设是macOS系统投屏到Linux系统&#xff0c;…

【数据分享】1929-2023年全球站点的逐年平均气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01;本次我们为大家带来的就是具体到气象监…

二手交易|校园二手交易小程序|基于微信小程序的闲置物品交易平台设计与实现(源码+数据库+文档)

校园二手交易小程序目录 目录 基于微信小程序的闲置物品交易平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、商品信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕…

C++类和对象引入以及类的介绍使用

文章目录 一、面向过程和面向对象的初步认识二、类的引入2.2 类的引入 三、类的访问限定符及封装3.3 访问限定符3.4 【面试题】C中struct和class的区别3.5 类的两种定义方式 四、封装【面试题】面向对象的三大特性 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储…

《动手学深度学习(PyTorch版)》笔记4.1

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…

Python列表中的append功能及用法举例

Python列表中的append功能及用法举例 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;append()&#x1f333;&#x1f340;功能介绍&#x1f340;&#x1f340;语法&#x1f340;&#x1f340;示例&#x1f340;&#x1f340;注意事项&#x…

如何使用宝塔面板搭建MySQL 5.5数据库并实现公网远程连接

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

SpringCloud-高级篇(十八)

前面我们已经实现了多级缓存架构&#xff0c;大大提高了查询商品的性能&#xff0c;缓存在提高性能的同时&#xff0c;也带来了一致性的问题&#xff0c;比如说数据库发生了修改&#xff0c;这个时候&#xff0c;如果缓存依然是旧的数据&#xff0c;两者就产生了不一致&#xf…

Cesium介绍及3DTiles数据加载时添加光照效果对比

一、Cesium简介 Cesium原意是化学元素铯&#xff0c;铯是制造原子钟的关键元素&#xff0c;通过命名强调了Cesium产品专注于基于时空数据的实时可视化应用。熟悉GIS开发领域的读者都知道&#xff0c;Cesium是一个用于创建3D地理空间应用程序的开源JavaScript库&#xff0c;它允…

RSTP的P/A机制

如图所示根桥S1和S2之间新添加了一条链路,在当前状态下S2的另外几个端口p2是Alternate端口,p3是指定端口且处于Forwarding状态,p4是边缘端口。新链路连接成功后,P/A机制协商过程如下。 1.P0和P1两个端口马上都先成为指定端口发送RS TBPDU。 2.S2的P1口收到更优的RST BPD…

C#颜色拾取器

1&#xff0c;目的&#xff1a; 获取屏幕上任意位置像素的色值。 2&#xff0c;知识点: 热键的注册与注销。 /// <summary>/// 热键注册/// </summary>/// <param name"hWnd">要定义热键的窗口的句柄 </param>/// <param name"id…

pygame学习(一)——pygame库的导包、初始化、窗口的设置、打印文字

导语 pygame是一个跨平台Python库(pygame news)&#xff0c;专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生&#xff0c;提供图像模块&#xff08;image&#xff09;、声音模块&#xff08;mixer&#xff09;、输入/输出&#xff08;鼠标、键盘、显示屏&#xff09;…