c语言求数组长度的问题

void write (unsigned char[]);

int main (void)
{
unsigned char led[]={0xf0,0x0f,0xff,0xfe};

write (led);
}
void write (unsigned char dat[])
{
int x;

while(1)

{

x=sizeof(dat)/sizeof(dat[1]); //为什么x=3,不是应该4吗?
}

}

第1个回答  2014-07-19

确实是4,不是3。下面是我的运行结果截图:

GCC 编译器的结果。

追问

怎么会这样?keil 调试显示x=3.。。

追答

这个应该是Keil编译器的问题。

第2个回答  2014-07-19
sizeof命令中,
一、如果参数是指针变量(无论什么类型的指针)其结果都是4
二、如果参数是是数组,会返回数组所占空间的大小,即:int a[n] ; sizeof(a)=n*sizeof(int) ;
三、如果参数是个变量类型,则会返回这个类型所占空间的大小。sizeof(char)=1 sizeof(int)=4 sizeof(double)=8 具体一个变量类型所占的空间大小与机器类型有关系,如32位机long占4字节,而64位机long占8字节。追问

答非所问

本回答被网友采纳
第3个回答  2014-07-19
void write (unsigned char dat[])
{
    int x;
        x=sizeof(dat)/sizeof(dat[1]);  //为什么x=3,不是应该4吗?
        printf("x:%d\n",x);
   

}

在我这显示的是4

追问

怎么会这样?keil 调试显示x=3.。。

追答

你可以在x= ;把sizeof(dat)和sizeof(dat[1])打印出来看看是多少

追问

我编写对象是单片机,不包含stdio.h,软件模拟运行确实是3,但是换成sizeof(led)是4,

第4个回答  2014-07-19
应该是4.
while(1)在这里会死循环的。
相似回答