c语言下地址和指针是不是一个东西

今天拿到了日本前桥和弥写的《征服c指针》感觉这本书还不错,内容讲的还是挺通俗的,类似于讨论一样和你在探讨一些关于c的缺陷和奇怪的语法。
文章中作者很少直接点出问题的答案,基本就是抛出一个问题,然后给你举一大堆例子 ,但是你不总结的话就没有什么营养,乍一看都是一些和问题无关的话,但是你仔细总结就会发现,作者别有用心。

书中作者关于地址和指针给出了解释:

  • 在一段内存地址上储存了一个数字,要想拿到这个数字就必须知道地址和数据类型不然是把数字不会拿出来的。void*。

    int hoge = 5;
    void *hoge_p;
    hoge_p = &hoge; 
    printf ("%d",*hoge_p); //这样是不能把数字拿出来的,因为你没有类型 
    printf("%d",* ( int*)hoge_p);强制类型转换就可以拿出数据
    

地址没有类型,而指针有类型,你不能使一个int*型的指针指向double类型的变量。
其他区别我还没有发现。

if(str == "abc")
 printf ("laji");
  • 在c中实际运行的时候,就算你在开头的时候已经给str给过值了,还是不会运行下面的代码,解释是因为
    if()这个形式比较的是地址所以并不会相同,其实c语言中并没有字符串,所谓的字符串就是字符数组。

通过观察可以看出,指针类型和int是不是一回事呢?都是整数,那是不是就没有区别

  • 我们通过%p,%x,%d,都可以看到地址 ,但是我们通常都是比对地址是否相同,但是
    并没有去考察地址是否就是所打印的数字,其实在很多运行环境中,int和 指针类型并不相同,一般地址通过16位的值来表示二十位的地址。
  • inter8086分段寻址:物理地址由段地址和段偏移组成,各16位,段地址左移4位(也就是乘16),然后再与段内偏移相加得到物理地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值