c语言,这个程序是怎么运行的??输出的数字是怎么来的??
3个回答
展开全部
p1,p2分别为数组a中a[0],a[4]的地址,就是对应变量的内存区域在计算机内存中的地址。
现在一般电脑的内存都有4G左右,约4*10^9个字节。例程中a[0]实际存储的地址就是在内存中地址从3221216112开始的4个字节
a[0]地址范围:3221216112~3221216115,p1指向a[0]首地址就是3221216112
a[1]地址范围:3221216116~3221216119
以此类推a[2],a[4],
a[5]地址范围:3221216128~3221216131,p2指向的内存区为3221216128
因为p1,p2是同一个数组的元素的指针,因为元素之间有前后顺序,故可相减,差等于数组元素下标只差,为4。
p1和p2强制类型转换成int型为x和y后后丢掉了数组相关的特性,称为纯整数了,相加减就是纯数字加减了故y-x=3221216128-3221216112=16
因为y数值比x大,故y>x为1
现在一般电脑的内存都有4G左右,约4*10^9个字节。例程中a[0]实际存储的地址就是在内存中地址从3221216112开始的4个字节
a[0]地址范围:3221216112~3221216115,p1指向a[0]首地址就是3221216112
a[1]地址范围:3221216116~3221216119
以此类推a[2],a[4],
a[5]地址范围:3221216128~3221216131,p2指向的内存区为3221216128
因为p1,p2是同一个数组的元素的指针,因为元素之间有前后顺序,故可相减,差等于数组元素下标只差,为4。
p1和p2强制类型转换成int型为x和y后后丢掉了数组相关的特性,称为纯整数了,相加减就是纯数字加减了故y-x=3221216128-3221216112=16
因为y数值比x大,故y>x为1
更多追问追答
追问
你讲的太好了,太吊了。
你是学这个专业的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你不要管3221216112这个数字
它显示出来只是希望告诉你差值
3221216112 和 3221216128 的差值的一定的。因为 3221216112 指向的是a的首地址
而3221216128 指向的是a[4]的地址,他们相差 4*4=16个地址。
至于3221216128 是怎么来的,这是一个随机又固定的数字。
随机是说不同的编译器产生的数字不通,固定是说每次运行都几乎会产生相同的数字
它显示出来只是希望告诉你差值
3221216112 和 3221216128 的差值的一定的。因为 3221216112 指向的是a的首地址
而3221216128 指向的是a[4]的地址,他们相差 4*4=16个地址。
至于3221216128 是怎么来的,这是一个随机又固定的数字。
随机是说不同的编译器产生的数字不通,固定是说每次运行都几乎会产生相同的数字
更多追问追答
追问
我大概理解了,我原以为这数字就是这个程序自己编写输出来的,所以不明白怎么赋值的。那那个4是怎么来的呢。
追答
一个整数int 占用4个字节。
从a的首地址到a[4]的地址,间隔了4个整数。总共占用了16个字节。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指针输出的是地址,变量输出的是地址的整数值
更多追问追答
追问
不懂,怎么运行的。比如3221216112
怎么来的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询