指针的理解

来源:互联网 发布:淘宝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 申请的对象一是耗费内存,二是反应速度慢,而对象
池就可以解决这样的问题。他对于那些频繁使用的数据会保留一段时间。减小频繁创建对象带来的开

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq充值话费错号怎么办 qq充错号码了怎么办 qq交话费不到账怎么办 充错手机号码而且是空号怎么办 微信钱包充错话费怎么办 QQ充值话费充到空号了怎么办 给别人充错话费怎么办 用qq交错话费对方是空号怎么办 号码变成空号了怎么办 qq冲流量冲错了怎么办 流量冲错了套餐怎么办 微信流量充错号码怎么办 微信支付不进账怎么办 充话费充不进去怎么办 用支付宝充话费没到账怎么办 支付宝充话费未到账怎么办 话费充了不到账怎么办 转转买家不确认收货怎么办 充话费错了怎么办啊 淘宝充值流量没到账怎么办 微信手机充错了怎么办 支付宝充话费没到账怎么办 裤子摔了一个洞怎么办 顾客反应衣服质量不好怎么办 淘宝买的衣服味道很大怎么办 三国杀账号忘了怎么办 宽带连接被删了 怎么办 手机被偷了qq怎么办 手机丢了微信怎么办啊 手机店把手机修坏了怎么办 在手机店买到山寨机手机怎么办 有人在qq群上骂我怎么办 qq群一直有人骚扰怎么办 苹果手机QQ图标不在桌面上怎么办 苹果手机长按不能删除怎么办 qq发的图片过期怎么办 九黎八卦在仓库怎么办 飞猪f2领了万豪银卡没住怎么办 机械键盘摁键冲突怎么办 玩游戏键盘没反应怎么办 玩枪战游戏头晕恶心怎么办