鱼C论坛

 找回密码
 立即注册
查看: 3524|回复: 5

数组下标索引_通过数组名计算数组元素大小的内存问题~~~!!!

[复制链接]
发表于 2011-10-8 14:14:25 | 显示全部楼层 |阅读模式

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

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

x
#include    <stdio.h>
void main()
{
    int a[10];
    int i;
    for(i=0; i < 10; i++)
    {
        scanf("%d",&a[i]);
    }
    printf("\n");
    for(i=0; i < 10; i++)
    {
        printf("%d",*(a+i));      
    }
}

第二个循环开始的的时候a数组的内存地址是0x0012ff58,进入循环i = 1 ,0x0012ff58+1,为什么能指向第二个元素的内存地址?? 这个a数组是int整形 在内存中一个int变量,编译器为它分配了4个字节 那么10个变量 不是等同于40个字节嘛?,a数组的内存地址是0x0012ff58,也就是第一个数组下标的地址,第二个数组下标的内存地址应该是:0x0012ff58+4,才对呀?,怎么加1也能访问到它~~!!!!!





小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-8 14:16:50 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-8 14:20 编辑

简单说,你这里输入加1实际上是指针地址+上编译器分配的字节数。。
楼主要去复习去了,这个貌似很多书上都有说过。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-10-8 14:27:22 | 显示全部楼层
本帖最后由 asd577586785 于 2011-10-8 14:28 编辑

呵呵 想明白了,反编译看了一下 在汇编中的确是加了4个字节,数组首地址+1 被编译器替换掉了而已,1其实是一个单元,因为在C语言中内存是以单元为准的,int类型的变量编译器分配4个字节,但是在C语法中把它比喻成了一个单元,方便我们进行编程,(猜想而已,表达不流利 ,莫不见怪){:1_1:},学汇编学蒙了,
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-8 14:29:27 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-8 14:32 编辑

说得没错,果然学了汇编就是不一样。。
看来,我也要花点时间去学汇编。。。
哦,突然天气热了,去洗个澡。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-8 14:54:22 | 显示全部楼层
路过。。。围观。学习、、、
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-13 13:18:02 | 显示全部楼层
        printf("%P",&a+i);
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-21 02:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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