谁能帮我解释一下,内存是如何编址的?

提出问题 解决问题 2006-05-14 11:15:21
谁能帮我解释一下,内存是如何编址的?
是每隔4位内存地址加1,还是每隔8位内存地址会加1啊?

如下的程序,加入ints的地址是100。那么ip的地址是多少?
#include <stdio.h>

main()
{
int ints[20]={10,20,30,40,50,60,70,80,90,
100,110,120,130,140,150,160,170,180,190,200};
int *ip=ints+3;
}

请帮忙分析一下,写下分析的过程,16位的系统和32位系统分别描述一下,谢谢。


...全文
295 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fiftymetre 2006-05-15
  • 打赏
  • 举报
回复
这样是无法准确的说出内址的地址的。因为指针不是顺序取址的。
jinjiajie 2006-05-15
  • 打赏
  • 举报
回复
...相信自己的眼睛不就得了
晨星 2006-05-15
  • 打赏
  • 举报
回复
内存都是按字节编址的,这个好像没有例外吧。
一个字节由8个比特构成。
  • 打赏
  • 举报
回复
#include <stdio.h>
大家请看,我编写了如下的代码:
main()
{
int ints[20]={10,20,30,40,50,60,70,80,90,
100,110,120,130,140,150,160,170,180,190,200};
int *ip=ints+3;
printf("ints=%d\n",ints);
printf("ints+3=%d\n",ip);
printf("ip-ints=%d\n",ip-ints);
}

执行结果为:
ints=1310512
ints+3=1310524
ip-ints=3

从上边的执行结果分析:
ints和ints+3只差12个地址。1310524-1310512=12;他们之间相差3个整数所占的长度,1个整数是32位,即是4个8位,如果3个整数就是3×4×8=12个8位,也就是说从这里可以看出,在我的机器中,8位被编成了一个内存的地址。

也就是说,我的计算机的内存,每八位被编成了一个内存地址。

请问我这样分析正确不正确。
zhtr32 2006-05-14
  • 打赏
  • 举报
回复
#include<stdio.h>
int main(void)
{
puts("32bit");

int a[3]={1,2,3};
printf("%p\n%p\n%p\n",a[0],a[1],a[2]);
printf(" size of a[0] is %d\n",sizeof(a[0]));
printf(" size of a is %d\n",sizeof(a));

getchar();

return 0;
}
晨星 2006-05-14
  • 打赏
  • 举报
回复
内存的编址是个系统底层的概念。
而你所问的是“指针运算”,这是C语言这门语言中的一个更抽象的概念。
它们虽有联系,但并不是同一个概念,也不是直接对应,首先应明白这一点。

C/C++语言中的指针运算考虑数据类型,回此对于指向某个A类型的指针p:
A* p;
来说,p + n的结果在数值上等于p的值再加上n * sizeof(A)。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧