【c 语言】声明了一个指针,会给指针分配内存吗?

在这里插入图片描述

🎈个人主页:豌豆射手^
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:C语言
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

声明了一个指针,会给指针分配内存吗?

    • 一 答案
    • 二 类比
  • 总结

在这里插入图片描述

引言:

一 答案

声明一个指针并不会自动为它分配内存。指针本身是一个变量,它存储的是另一个变量的地址,而不是该变量的内容。当你声明一个指针时,你只是为指针变量本身分配了内存空间,这个空间足够存储一个地址。但是,这个地址指向的内存区域并没有被分配或初始化。

例如,在C或C++中,你可以这样声明一个整数指针:

int *ptr;

这行代码为ptr分配了足够的内存来存储一个整数地址。但是,ptr此时并不指向任何有效的内存区域,它的值是未定义的。如果你试图通过ptr来访问或修改内存,可能会导致未定义行为,比如程序崩溃或数据损坏。

如果你想要让指针指向一个有效的内存区域,你需要使用如malloccallocnew等函数来动态分配内存,或者让指针指向一个已经存在的变量。例如:

int x = 10;
int *ptr = &x;  // ptr now points to x

或者

int *ptr = malloc(sizeof(int));  // dynamically allocate memory for an int
if (ptr != NULL) {*ptr = 10;  // store the value 10 in the allocated memory
} else {// handle memory allocation failure
}

记住,如果你使用mallocnew等函数动态分配了内存,那么在不再需要这块内存时,你应该使用freedelete等函数来释放它,以防止内存泄漏。

二 类比

在现实生活中,我们可以将指针类比为一张写有地址的便签纸。这张便签纸本身占据了一定的物理空间(就像内存中的指针变量),但它本身并不包含你想要找的东西(即指针指向的数据)。便签纸上写的是一个地址,告诉你需要去哪里找那个东西。

现在,假设你想要找一本特定的书。你首先写下这本书的存放位置的地址(比如书架的编号和层数)在一张便签纸上。这张便签纸就相当于指针声明,它占用了一定的空间(纸的面积),但纸上写的地址并不直接给你书的内容。

如果没有那本书,仅仅有写着地址的便签纸是没有用的。你必须确保在那个地址上确实有书才行。这就好比在程序中,你必须确保指针指向的内存区域已经被分配并且包含了有效的数据。

有几种方法可以在现实中“分配内存”给这本书:

  1. 购买书籍:这就像在程序中动态分配内存,比如使用mallocnew。你花钱买了书,这本书现在有了实体,并放在了指定的位置(地址)。

  2. 从图书馆借书:图书馆的书已经存在,你只需要找到它并记下它的位置(地址)。这就好比在程序中让指针指向一个已经存在的变量。

  3. 在书架上预留空间:你可以先预留一个书架上的位置,但直到你真正把书放在那里之前,那个位置是空的。这就像声明一个指针但不立即分配内存。

如果你仅仅写下地址但没有实际的书,当你按照地址去找时,你会发现那里什么都没有,这就像指针指向了一个未定义或未初始化的内存区域。同样地,如果你不再需要那本书了,你应该把它放回书架或归还给图书馆(释放内存)。

通过这个类比,我们可以更容易地理解指针和内存分配在编程中的概念。声明指针就像写下地址,而分配内存则确保在那个地址上有实际的内容。

总结

这篇文章到这里就结束了

谢谢大家的阅读!

如果觉得这篇博客对你有用的话,别忘记三连哦。

我是豌豆射手^,让我们我们下次再见

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

租用境外服务器,越南服务器的优势有哪些

自从中国加入世界贸易组织之后,国内经济增加速度非常快,同时越来越多的人选择去东南亚国家发展,因为当地的中国人很多,所以中国企业在当地面临着更小的文化差异。东南亚地区也是最新的经济体,互联网正处于蓬勃发展的阶…

Git 实用技巧1——从 Git 中停止追踪「被追踪的文件」 | 修改远程仓库地址

1. 从 Git 中停止追踪「被追踪的文件」 若误将 .idea, .vscode 中的本地配置文件添加到 git 中,会导致每次编译时,IDE 会提示 git 修改。为了减少/消除提示,需要将该文件取消追踪,但不能将其从本地删除,以取消对 work…

http、https、json编程

文章目录 1、http编程2、https编程3、json编程 1、http编程 HTTP 编程 http,归属于应用层的超文本传输协议 状态码:2xx(没问题) 3xx(重定向问题) 4xx(客户端问题) 5xx(服务端问题) 请求格式: 请求行 举例:GET /index.html HTTP/1…

docker服务无法启动

背景:断电重启经常会导致磁盘io错误,甚至出现磁盘坏块 这时可以使用xfs_repair来修复磁盘,但是修复过程可能会导致部分数据丢失 xfs_repair -f -L /dev/sdc问题一: Apr 15 19:27:15 Centos7.6 systemd[1]: Unit docker.service e…

linux安装weblogic

版本 Linux: Red Hat Enterprise Linux Server 6.9 64bit(安装了图形界面) JDK: 1.8U361 64bit weblogic: fmw_14.1.1.0.0_wls.jar 安装手顺 安装配置JDK 下载jdk压缩包 下载取得jdk-8I361-linux-x64.tar.gz将压缩包放置到linux,并解压缩到指定目录tar xvf jdk-8u201-…

【十一】MyBatis Plus 原理分析

MyBatis Plus 原理分析 摘要 Java EE开发中必不可少ORM框架,目前行业里最流行的orm框架非Mybatis莫属了,而Mybatis框架本身没有提供api实现,所以市面上推出了Mybatis plus系列框架,plus版是mybatis增强工具,用于简化My…

嵌入式系统及应用-1.1嵌入式

嵌入式系统 定义:看不见的计算机,一般不能被用户编程,它有一些专用的I/O设备,对用户的接口是应用专用的 通常将嵌入式计算机系统简称为嵌入式系统。 嵌入式系统是以应用为中心,以计算机技术为基础、软件硬件可裁剪、…

transformer上手(6)—— 微调预训练模型

1 加载数据集 以同义句判断任务为例(每次输入两个句子,判断它们是否为同义句),构建我们的第一个 Transformers 模型。我们选择蚂蚁金融语义相似度数据集 AFQMC 作为语料,它提供了官方的数据划分,训练集 / …

记录一下如何腾讯云服务器用客户端连MySQL

我一般喜欢用IDEA连数据库,别问我为啥(就喜欢用一个软件解决所有问题) 当然写SQL语句个人还是觉得sqlyog体验最佳!

【C/C++】什么是内存泄漏?如何检测内存泄漏?

一、内存泄漏概述 1.1 什么是内存泄漏 内存泄漏是在没有自动 gc 的编程语言里面,经常发生的一个问题。 自动垃圾回收(Automatic Garbage Collection,简称 GC)是一种内存管理技术,在程序运行时自动检测和回收不再使用…

MySQL8.0.36-社区版:错误日志(3)

mysql有个错误日志,是专门记录错误信息的,这个功能默认是开启的 一般都是在/var/log/mysqld.log 日志中存放 1.错误日志的位置 首先我们使用命令去查看一下,这个错误日志文件究竟在哪 进入到mysql中,使用命令 show variables…

LeetCode热题Hot100 - 合并K个升序链表

一刷~ 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 思路: 逆天了- -困难模式一次过- - 第一反应,n个列表,两两合并,n-1次遍历即可,…

Spring容器初始化之前,利用SpringBoot监听器做一些数据库方面的检查

之所以把数据库的连接、结构、最小初始化等检查项放到SpringBoot监听器而不是Spring容器的初始过程。是有原因的。 1:SpringBoot监听器是SpringBoot初始化过程中,最先被执行的那一批周期函数。 2:数据库连接测试能很快的获得结果。 3&#xf…

FME学习之旅---day24

我们付出一些成本,时间的或者其他,最终总能收获一些什么。 高级地理数据库 教程:地理数据库转换 上述教程包括 如何使用 Esri 模板地理数据库 该内容在FME学习之旅day19 已经学习过 使用地理数据库属性域:编写编码属性域 属…

机器学习实训 Day1(线性回归练习)

线性回归练习 Day1 手搓线性回归 随机初始数据 import numpy as np x np.array([56, 72, 69, 88, 102, 86, 76, 79, 94, 74]) y np.array([92, 102, 86, 110, 130, 99, 96, 102, 105, 92])from matplotlib import pyplot as plt # 内嵌显示 %matplotlib inlineplt.scatter…

古月·ROS2入门21讲——学习笔记(一)核心概念部分1-14讲

讲解视频地址:1.ROS和ROS2是什么_哔哩哔哩_bilibili 笔记分为上篇核心概念部分和下篇常用工具部分 下篇:古月ROS2入门21讲——学习笔记(二)常用工具部分15-21讲-CSDN博客 目录 第一讲:ROS/ROS2是什么 1. ROS的诞生…

Python-GEE遥感云大数据分析、管理与可视化及多领域案例实践应用

随着航空、航天、近地空间遥感平台的持续发展,遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升,呈现出大数据特征。这为相关研究带来了新机遇,但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域…

海外代理IP在跨境电商中发挥什么作用?

在我国跨境电商的发展中,海外代理IP的应用日益广泛,它不仅帮助商家成功打入国际市场,还为他们在多变的全球电商竞争中保持优势。下面是海外代理IP在跨境电商中五个关键的应用场景。 1、精准的市场分析 了解目标市场的消费者行为、产品趋势以…

金蝶云星空与泛微OA对接案例-实现流程一体化

摘要:在企业数字化中,集成内部各业务系统以实现数据共享与流程协同,已成为提升运营效率、优化决策的重要选择。本文将以某企业成功实现金蝶云星空与泛微OA系统对接为例,详细解析双方在人员信息、组织架构、销售合同、付款申请、报…

Java中数组的使用

在Java编程中,数组是一种非常重要的数据结构,它允许我们存储相同类型的多个元素。对于初学者来说,理解数组的基本概念、初始化、遍历、默认值以及内存分配和使用注意事项是非常关键的。 一、数组的概念 数组是一个可以容纳多个相同类型数据…