java 内存指针_C指针和内存
我正在学习C,现在我撞墙了 . 我很难理解指针 .
想象一下,我有这个代码:
#include
#include
#include
#define DELTA 33
int calls, seed=356;
int sum_ds(int a){
int d=DELTA;
calls++;
return a+d+seed;
}
int main() {
int num;
int *ptr;
int **handle;
num = 14;
ptr = (int *)malloc(2 * sizeof(int));
handle = &ptr;
*(*handle+0) = num;
*(*handle+1) = num+1;
*ptr = num-2;
ptr = #
*ptr = sum_ds(num-2);
}
让我们逐步了解我的理解 .
1 - int调用创建一个名为calls的变量,并不初始化它,因此它包含垃圾 . 它存储在DATA上,假设存储器地址为0xFFAA .
2 - int种子创建一个名为种子的变量,用整数356初始化 . 它存储在DATA上,让我们说内存地址为0xFFAB .
3 - int num创建一个名为num的变量,并且不对其进行初始化,因此它包含垃圾 . 它存储在STACK上,假设存储器地址为0xFFAC .
4 - int * ptr创建一个指向int的指针,并且不为其分配任何地址 . 它存储在STACK上,假设存储器地址为0xFFAD .
5 - int ** handle创建一个指向int指针的指针,并且不为它指定任何地址 . 它存储在STACK上,假设存储器地址为0xFFAE . (很多人在这里烦恼)
6 - num = 14进入地址0xFFAC并在其上存储数字14 . 它是在STACK中完成的 .
7 - ptr =(int )malloc(2 * sizeof(int))在HEAP上,它为2个整数分配了内存大小,第一个内存字节的地址(比如说0xFFZZ)存储在ptr上(在STACK上),所以现在 ptr指向该内存地址 .
8 - handle =&ptr handle现在指向ptr . 我相信它现在指向0xFFZZ上的任何东西(很多人在这里)
9 - ( handle 0)= num指向int指针的指针,现在指定的值为num(14)(很多很多人在这里玩的很多)
10 - ( handle 1)= num 1指针的指针加上一个int,现在它的值被赋值为num 1(15)(很多很多人在这里玩了很多)
11 - * ptr = num-2值ptr指定值为num - 2(12) . 我相信它会进入内存地址0xFFZZ并存储数字12 .
12 - ptr =&num ptr现在指向num,我相信它现在指向0xFFAC .
13 - * ptr = sum_ds(num-2)ptr指向的值是sum_ds的返回值 . 我相信0xFFAC它被分配了401(12 33 356)
这是正确的吗?
java 内存指针_C指针和内存相关推荐
- 共享内存 传一个类指针_C++指针
简介 指针一直是C语言和C++语言最难理解的一部分,无论是C语言和C++语言,复杂的数据结构都是离不开指针的运用,所以必须掌握好指针这个数据类型,你才能够在阅读框架代码时,游刃有余.今天我们从指针的本 ...
- python 指针_C++的动态内存:C++的指针
在C++里,指针(pointer)变量被用来存储内存地址.C++要求使用特定的类型来定义指针.这个类型被用来指示需要如何去解释内存地址里的数据.我们已经知道,在计算机的内部,内存存储的是1和0,而C+ ...
- html5 自带video内存泄露_C++ 如何避免内存泄露?
来源:知乎-张凯(Kyle Zhang) [CPP开发者导读]:内存泄漏是C/C++的一个老生常谈的问题,无论是新手还是有经验的开发者都会在这个问题上栽跟头. 本文向读者介绍了如何避免内存泄漏的方法和 ...
- C语言与JAVA内存管理_C语言动态内存管理和动态内存分配
动态内存管理同时还具有一个优点:当程序在具有更多内存的系统上需要处理更多数据时,不需要重写程序.标准库提供以下四个函数用于动态内存管理: (1) malloc().calloc() 分配新的内存区域. ...
- c linux new使内存耗尽_C/C++的内存泄漏检测工具Valgrind memcheck的使用经历
Linux下的Valgrind真是利器啊(不知道Valgrind的请自觉查看参考文献(1)(2)),帮我找出了不少C++中的内存管理错误,前一阵子还在纠结为什么VS 2013下运行良好的程序到了Lin ...
- c# 定位内存快速增长_c#如何避免内存分配瓶颈以提高多线程性能
我使用C#作为研究工具,经常需要运行CPU密集型任务,例如优化.从理论上讲,我应该能够通过多线程化代码来提高性能,但实际上当我使用与工作站上可用内核数量相同的线程数时,我通常会发现CPU仍然只运行在2 ...
- 前向声明 智能指针_C++ 指针类中实现 -gt;*
C++ 的裸指针是提供 ->* 的运算符的.但 C++ 智能指针目前是不提供 ->* 的运算符的.因为实现起来比较麻烦,而且没有必要.本文来实现一个,需要用到 C++17. 这篇文章本身在 ...
- 使用智能指针错误导致内存泄漏_C++智能指针使用的那些事
指针指针的由来 在C/C++里面,内存管理由开发者自己管理.指针变量总是指向一片内存空间,这片内存空间可以是局部变量.也可以是通过malloc.new申请的.如果申请的内存没有释放,就会导致内存泄漏. ...
- 如何释放指针又不影响内存数据_C# 内存机制 - 基础篇
腾讯面前端暑期实习还有一道让我有点窒息的题目,当时好像是问我C#内存分块底层?我有点不大懂面试官的意思.所以干脆一起总结一下免得无话可说. 1 Overview 首先开宗明义,C#是一种托管语言,它的 ...
最新文章
- JS实现——俄罗斯方块
- Array的用法总结-swift
- html中post语句,html中post乱码的解决方法
- WebAudioAPI 入门
- 专科python应届生工资多少-应届生学Python年薪30万,秘诀是什么?
- 第二个案例实操——创建Bean类
- php调用笛风接口,优雅的用PHP来实现解析抖音无水印视频!
- 排名 教材 数字电子技术_数字电子技术教材改革及实践
- R数据分析:混合效应模型的可视化解释,再不懂就真没办法
- 使用 Java 操作 Kubernetes API
- 什么是云计算,云计算的三种类型
- Windows图片和传真查看器开启故障
- Linq分页(skip和Take)
- Image Super Resolution Using Conventional Neural Network (SRCNN)
- 大规模数据 | RAID | 垂直伸缩水平伸缩 | HDFS
- 抖音屏保Java_java编写抖音超火时钟屏保 swing编写
- long long类型上限_32位long最大值
- Intellij IDEA代码后缀补全
- 使用libreswan搭建ipsec点对点隧道 实现两idc内网网段互通
- 计算机如何启动远程服务,Win7如何开启远程桌面服务
热门文章
- 比特币挖矿成本表_用算力趋势预测减半后比特币挖矿成本价
- java怎么实现查找n功能_java 实现微信搜索附近人功能
- bzoj3551 [ONTAK2010]Peaks加强版 kruskal重构树
- 2017.8.9 老C的键盘 思考记录
- 【英语学习】【Daily English】U07 Restaurant L02 I don't think this is what I ordered?
- JDK、JRE、JVM的区别与联系
- 程序员的自我修养——读《软技能-代码之外的生存指南》笔记
- socket套接字TCP API
- python 运行时 变量_python运行过程,变量,符号
- Metal:对 iOS 中 GPU 编程的高度优化的框架