鱼C论坛

 找回密码
 立即注册
查看: 1771|回复: 12

[已解决]关于地址的理解

[复制链接]
发表于 2017-4-8 16:21:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int *p,*q;
  5.     int a[2]={1,2};
  6.     p=&a[0];
  7.     q=p+1;
  8.     printf("%ld\n",p);
  9.     printf("%ld\n",q);
  10.     printf("%ld\n",q-p);
  11.     return 0;
  12. }
复制代码

输出第一行是
140734799804192
输出第二行是
140734799804196
输出第三行是
1
我一开始认为第三行输出的4,请问一下这是为什么?
屏幕快照 2017-04-08 下午4.16.36.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-4-8 16:26:15 | 显示全部楼层
@人造人 @zealstar 先召唤大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 17:05:05 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +15 鱼币

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
超凡天赐 + 5 + 5 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 19:24:46 From FishC Mobile | 显示全部楼层
人造人 发表于 2017-4-8 17:05
http://blog.sina.com.cn/s/blog_5fb3f12501016jiy.html

你的博客?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 19:26:56 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 09:47:17 | 显示全部楼层

回帖奖励 +15 鱼币

指针的加减运算是以指针指向的数据类型为基本单位的

既然 p=q+1,那么p-q == 1
至少C语言的创造者是这样来让逻辑合理的。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
超凡天赐 + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-9 20:32:55 | 显示全部楼层
zealstar 发表于 2017-4-9 09:47
指针的加减运算是以指针指向的数据类型为基本单位的

既然 p=q+1,那么p-q == 1

可是为什么我用%d来打印p会警告,而用%d来打印p-q就不会警告,原谅我的钻牛角尖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-9 20:40:30 | 显示全部楼层
zealstar 发表于 2017-4-9 09:47
指针的加减运算是以指针指向的数据类型为基本单位的

既然 p=q+1,那么p-q == 1

我先来自问自答一下,原因是p的量是一个地址值,在语法上不能用%d来打印。而p-q表示的就是个数,可以用%d
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 18:19:58 | 显示全部楼层
超凡天赐 发表于 2017-4-9 20:40
我先来自问自答一下,原因是p的量是一个地址值,在语法上不能用%d来打印。而p-q表示的就是个数,可以用%d

你这不是已经懂了么……,正解就是这样,别的语言也会这样处理。本来嘛,除汇编以外的语言都是为了方便人操作,不用手工计算地址和跨度问题,所以才这样编制的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-4-12 12:09:04 | 显示全部楼层

回帖奖励 +15 鱼币

学习了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-14 10:51:18 | 显示全部楼层
@qq1242009750 @四十二 来领鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-14 16:34:12 | 显示全部楼层

回帖奖励 +15 鱼币

超凡天赐 发表于 2017-4-14 10:51
@qq1242009750 @四十二 来领鱼币

来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-23 15:21:27 | 显示全部楼层

回帖奖励 +15 鱼币

哎呀我来晚了~

看来您老人家应该已经解决了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 02:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表