找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1445|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

請教大家sizeof函數(shù)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:978416 發(fā)表于 2024-6-26 20:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
函數(shù)
void buzzer_on(int*        music)
{
       sizeof(music)
       
}


實(shí)際傳入的是一個(gè)數(shù)組
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,而不是實(shí)際大小
直接sizeof(solitary_brave)打印出來才是實(shí)際的值
是哪里錯(cuò)了嗎


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:526108 發(fā)表于 2024-6-27 06:35 | 只看該作者
music是指針,計(jì)算的是指針占用內(nèi)存的大小,還有sizeof不是函數(shù)
回復(fù)

使用道具 舉報(bào)

板凳
ID:1109793 發(fā)表于 2024-6-27 07:34 | 只看該作者
sizeof是操作符,不是函數(shù),只能用在靜態(tài)內(nèi)存分配的變量上面。
回復(fù)

使用道具 舉報(bào)

地板
ID:744809 發(fā)表于 2024-6-27 08:45 | 只看該作者
int*        music 你傳進(jìn)去的是指針,你這個(gè)平臺的cpu int型指針的大小是4
回復(fù)

使用道具 舉報(bào)

5#
ID:401564 發(fā)表于 2024-6-27 09:35 | 只看該作者
sizeof是C語言關(guān)鍵字,不是函數(shù),它就像for  if之類的
它的含義1樓已經(jīng)說明了
sizeof(music)它是計(jì)算music所占空間的大小,就是music變量所占的字節(jié)數(shù)
回復(fù)

使用道具 舉報(bào)

6#
ID:1121700 發(fā)表于 2024-6-27 10:19 | 只看該作者
sizeof(*music)
回復(fù)

使用道具 舉報(bào)

7#
ID:978416 發(fā)表于 2024-6-27 21:23 | 只看該作者
再問一下各位,像這樣怎么才可以讀取出實(shí)際的大小呢,就是以傳入形參的方式,有沒有其他的關(guān)鍵字,或者怎樣改動(dòng)一下,謝謝各位。
回復(fù)

使用道具 舉報(bào)

8#
ID:1127396 發(fā)表于 2024-6-28 10:19 | 只看該作者
可以把size大小作為參數(shù)傳遞給目標(biāo)buzzer_on。
回復(fù)

使用道具 舉報(bào)

9#
ID:1127399 發(fā)表于 2024-6-28 10:44 | 只看該作者
一般都是將數(shù)組地址、數(shù)組長度作為參數(shù)傳入函數(shù)的。

// 函數(shù)
void buzzer_on(int*  music, int len)
{
     ...  
}

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

但是,如果因?yàn)樘厥庠,不能把長度當(dāng)參數(shù),那,,,如果是我的話,會(huì)在每個(gè)數(shù)組末尾加個(gè)特殊字符,例如:
// 數(shù)組
int solitary_brave_1[]=
{
        M6,50,M7,50,H1,50,H2,50,M7,50,H1,50,H1,100,Z0,10,F(xiàn)F // FF當(dāng)作特殊字符
};

// 函數(shù)
void buzzer_on(int*  music)
{
     int* ptr;
     int len = 0;

     ptr = music;
     while(*ptr != FF)
     {
         len++;
         ptr++;
     }
     len *= 4; // len就是數(shù)組長度
}
回復(fù)

使用道具 舉報(bào)

10#
ID:592807 發(fā)表于 2024-7-2 10:24 | 只看該作者
egsresrhtrhrtst 發(fā)表于 2024-6-27 21:23
再問一下各位,像這樣怎么才可以讀取出實(shí)際的大小呢,就是以傳入形參的方式,有沒有其他的關(guān)鍵字,或者怎樣 ...

要不你試試函數(shù)strlen()函數(shù),這是計(jì)算字符串長度的函數(shù)。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表