指针的理解
来源:互联网 发布:淘宝app 商品列表 编辑:程序博客网 时间:2024/06/12 09:21
指针
指针一直没怎么弄明白,导致数据结构的理解一直有问题。看来今天必须要做个了解。废话不多说,先上代码
int main(){ int a = 10, *p; p = &a; printf("a = %d *p = %d\n", a,*p); printf("&a = %d p = %d\n", &a, p); printf("&p = %d\n", &p); return 0;}
程序运行结果如下
a = 10 *p = 10
&a =6356748 p = 6356748
&p = 6356744
我们先区分一下这三个词,p, *p, &p。如图
从图片我们可以粗糙的理解为&为求值,*为求址中值
结合图和程序运行结果理解这三个概念应该不难,那么我们接下来讨论一下数据结构中的指针。代码
如下
/*省略部分代码*/void CreateBiTree(BiTree *bt){ char ch; ch = getchar(); if(ch == '.') *bt = NULL; else{ *bt = (BiTree)malloc(sizeof(BiTNode)); (*bt)->data = ch; CreateBiTree(&((*bt)->Lchild)); CreateBiTree(&((*bt)->Rchild)); }}int main(){ BiTNode *T; CreateBiTree(&T); return 0;}
学过指针的都知道指针传递的规则,如 int *p = &q;(q为int型指针),所以在CreateBiTree传递的是地
址。而getchar()是遇到enter键才会停止,并且每次只读一个字符。可能最关键的是这一句
*bt = (BiTree)malloc(sizeof(BiTNode)); 这表示malloc申请了一个BiTree类型, 空间大小为
sizeof(BiTNode)的空间。并把这个空间的地址返回给了 *bt. 接下来是数据结构的知识。
要说做笔记,那还是把其他的笔记附带上吧,接下来探讨下java中的堆、栈和对象池。栈和堆其实都
在RAM内。在java中Java自动管理堆栈。
栈的优缺点
- 速度快,仅次于CPU中的寄存器
- 数据可以共享
- 生命周期必须确定,灵活性差
堆的优缺点
- 动态分配内存的大小
- 生命周期可以不用告诉
- 数据不能共享
- 存取速度慢
Java的8种类型变量(int, short, long, byte, float, double, boolean, char)具有字面值得数据如
int a = 7;由于大小可知,生存周期可知,存放在栈中。由于栈的共享性,但又一个int b = 7; 的常
量。那么a 和 b的地址一样。
还有一种是包装类数据如(Integer, String , Double)等将其相应的基本数据全部存放在堆中,
Java 用 new()语句来显示的告诉编译器,在运行时根据需要创建,因此比较灵活,但缺点是要占用更
多的时间。
但是我们在String上却找到了不一样的结果,例如
String str1 = "abc", str2 = "abc";
String str3 = new String("cba");
String str4 = new String("cba");
if(str1 == str2)System.out.println("true");//比较的是地址
if(str3 == str4)System.out.println("true");//比较的是地址
根据运行的结果发现,第一个判断是正确的,第二个是错误的。按照上面对战的分析应该是两个都
错,但是为什么会出现这样的情况勒。
原因是String str1 = “abc”; 以这种形式表达的str1并没有存放在堆中,而是存放在了对象
池中,而对象池中的数据可以共享。而且用new 申请的对象一是耗费内存,二是反应速度慢,而对象
池就可以解决这样的问题。他对于那些频繁使用的数据会保留一段时间。减小频繁创建对象带来的开
销
。阅读全文
0 0
- 理解“指针的指针”
- 指针的指针理解
- 指针的指针的理解
- 指针的指针用法理解
- 深入理解指针的指针
- 如何理解指针的指针
- 指针的理解
- 指针的理解-1
- 指针的理解
- 指针的进一步理解
- 指针的理解
- C 指针的理解
- 智能指针的理解
- 函数指针的理解。
- 理解指针的方法
- 理解指针的偏移
- 函数指针的理解
- 指针的理解
- 常见功能--下拉刷新、上拉加载更多效果实现
- 【语言转换】matlab prctile方法IDL实现
- [SDOI2009]HH去散步
- 创始人周航:乐视挪用13亿直接导致易到如今的资金问题
- 容器技术的火热现状与未来展望 | 硬创公开课
- 指针的理解
- GTK 中的 treeview 构件有浅入深
- LintCode452:删除链表中的元素
- scikit-learn 学习笔记(一)
- 第0课--预热作业
- 定位new
- 08-面向对象(多态-成员变量)1 08-面向对象(多态-成员变量)2
- 大小端规则
- 欢迎使用CSDN-markdown编辑器