标题: 请教大家sizeof函数 [打印本页]

作者: egsresrhtrhrtst    时间: 2024-6-26 20:19
标题: 请教大家sizeof函数
函数
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)打印出来才是实际的值
是哪里错了吗



作者: 624353765    时间: 2024-6-27 06:35
music是指针,计算的是指针占用内存的大小,还有sizeof不是函数
作者: xiaobendan001    时间: 2024-6-27 07:34
sizeof是操作符,不是函数,只能用在静态内存分配的变量上面。
作者: 123156fsadf    时间: 2024-6-27 08:45
int*        music 你传进去的是指针,你这个平台的cpu int型指针的大小是4
作者: Y_G_G    时间: 2024-6-27 09:35
sizeof是C语言关键字,不是函数,它就像for  if之类的
它的含义1楼已经说明了
sizeof(music)它是计算music所占空间的大小,就是music变量所占的字节数
作者: EELDFW    时间: 2024-6-27 10:19
sizeof(*music)
作者: egsresrhtrhrtst    时间: 2024-6-27 21:23
再问一下各位,像这样怎么才可以读取出实际的大小呢,就是以传入形参的方式,有没有其他的关键字,或者怎样改动一下,谢谢各位。
作者: xzw5151    时间: 2024-6-28 10:19
可以把size大小作为参数传递给目标buzzer_on。
作者: mrfdream    时间: 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就是数组长度
}

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

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





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1