鱼C论坛

 找回密码
 立即注册
查看: 2504|回复: 8

S1E29 为何这里是占40个字节而不是80个字节?

[复制链接]
发表于 2022-1-15 15:33:25 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

void get_array(int b[10]);

void get_array(int b[10])
{
        int i;

        printf("sizeof b: %d\n", sizeof(b));
}

int main()
{
        int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

        printf("sizeof a: %d\n", sizeof(a));
        get_array(a);

        return 0;
}



在我机器内运行的结果是
a=40
b=8
为啥a不是等于80呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-15 16:26:11 | 显示全部楼层
4 * 10 = 40
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-15 17:08:00 | 显示全部楼层
        楼主不妨说说 a = 80 的理由。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-15 17:49:33 | 显示全部楼层
整型就是4个字节的
你这个整型数组10个元素,sizeof整个数组的大小 => 10 x 4 = 40
你这机器应该是64位的吧,指针占8字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-16 23:13:37 | 显示全部楼层
A怎么也飞不到80吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 07:32:13 From FishC Mobile | 显示全部楼层
改成long  和  long long int 试一试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-28 15:46:54 | 显示全部楼层
int 类型是占4个字节,
数组作为形参,传递的是地址,也就是指针,指针变量在64位系统中是8字节,32位系统是4字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-29 00:46:59 | 显示全部楼层
确实很奇怪,按照函数中数组退化为指针,形参a常量指针的大小为8字节可以推出编译器是用64位的,所以整型变量a[0]应该是8个字节,所以数组的大小为80 == 8 * 10个字节,我也不明白为什么不是80,不过不用纠结这种问题,应该跟编译器有关系
1659026368465.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-30 07:35:13 | 显示全部楼层
首先假设lz是64位系统

这样int占32bit即4字节
int[10]即为4*10=40字节
传入get_array函数时传入的是int*而非int[10]
因为是64位系统,所以
需要64bit表示内存地址地址,即8字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 23:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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