找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 672|回复: 9
收起左侧

请教大家sizeof函数

[复制链接]
ID:978416 发表于 2024-6-26 20:19 | 显示全部楼层 |阅读模式
函数
void buzzer_on(int*        music)
{
       sizeof(music)
       
}


实际传入的是一个数组
int solitary_brave[]=
{
        M6,50,M7,50,H1,50,H2,50,M7,50,H1,50,H1,100,Z0,10,
};



buzzer_on(solitary_brave);

想问一下各位为什么sizeof(music)打印出来的值是4,而不是实际大小
直接sizeof(solitary_brave)打印出来才是实际的值
是哪里错了吗


回复

使用道具 举报

ID:592807 发表于 2024-7-2 10:24 | 显示全部楼层
egsresrhtrhrtst 发表于 2024-6-27 21:23
再问一下各位,像这样怎么才可以读取出实际的大小呢,就是以传入形参的方式,有没有其他的关键字,或者怎样 ...

要不你试试函数strlen()函数,这是计算字符串长度的函数。
回复

使用道具 举报

ID:1127399 发表于 2024-6-28 10:44 | 显示全部楼层
一般都是将数组地址、数组长度作为参数传入函数的。

// 函数
void buzzer_on(int*  music, int len)
{
     ...  
}

int main()
{
    buzzer_on(solitary_brave, sizeof(solitary_brave));
}

但是,如果因为特殊原因,不能把长度当参数,那,,,如果是我的话,会在每个数组末尾加个特殊字符,例如:
// 数组
int solitary_brave_1[]=
{
        M6,50,M7,50,H1,50,H2,50,M7,50,H1,50,H1,100,Z0,10,FF // FF当作特殊字符
};

// 函数
void buzzer_on(int*  music)
{
     int* ptr;
     int len = 0;

     ptr = music;
     while(*ptr != FF)
     {
         len++;
         ptr++;
     }
     len *= 4; // len就是数组长度
}
回复

使用道具 举报

ID:1127396 发表于 2024-6-28 10:19 | 显示全部楼层
可以把size大小作为参数传递给目标buzzer_on。
回复

使用道具 举报

ID:978416 发表于 2024-6-27 21:23 | 显示全部楼层
再问一下各位,像这样怎么才可以读取出实际的大小呢,就是以传入形参的方式,有没有其他的关键字,或者怎样改动一下,谢谢各位。
回复

使用道具 举报

ID:1121700 发表于 2024-6-27 10:19 | 显示全部楼层
sizeof(*music)
回复

使用道具 举报

ID:401564 发表于 2024-6-27 09:35 | 显示全部楼层
sizeof是C语言关键字,不是函数,它就像for  if之类的
它的含义1楼已经说明了
sizeof(music)它是计算music所占空间的大小,就是music变量所占的字节数
回复

使用道具 举报

ID:744809 发表于 2024-6-27 08:45 | 显示全部楼层
int*        music 你传进去的是指针,你这个平台的cpu int型指针的大小是4
回复

使用道具 举报

ID:1109793 发表于 2024-6-27 07:34 | 显示全部楼层
sizeof是操作符,不是函数,只能用在静态内存分配的变量上面。
回复

使用道具 举报

ID:526108 发表于 2024-6-27 06:35 | 显示全部楼层
music是指针,计算的是指针占用内存的大小,还有sizeof不是函数
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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