萧芸凤 发表于 2012-10-8 22:53:13

关于sizeof()函数的一个问题

先看一下程序


void ar(byte *arra)
{

int n = sizeof (*arra) / sizeof (arra);

Serial.print(" sizeof (arra)= ");
Serial.println(sizeof (arra));
Serial.print("sizeof (arra= ");
Serial.println( sizeof (arra));
      
byte a;

for ( int i = 0 ; i < n; i++)
{
    arra = i*3;
}
       
}

void setup()
{
Serial.begin(9600);
}
void loop()
{      
byte arr;
   ar(arr);
for (int i = 0 ; i <7 ; i++)
Serial.println(arr);
}

比较简陋,主要是为了说明问题,按照想法
Serial.print(" sizeof (arra)= ");
Serial.println(sizeof (arra));
Serial.print("sizeof (arra= ");
Serial.println( sizeof (arra));
的输出应该是7,1,
但是运行的结果如图

居然是2,1
这个是为什么呢?

test01 发表于 2012-10-9 01:27:40

本帖最后由 test01 于 2012-10-9 01:46 编辑

sizeof函数的原理是编译时获得括号中参数的长度
你写的ar函数传递的只是一个 指针,在ar函数内用sizeof去测arra,就是得到指针变量的长度,而不是数组长度
要直接在loop内用sizeof(arr)得到数组长度赋值给一个变量,比如arrlen=sizeof(arr);,然后ar(arr,arrlen);
void ar(byte *arra,int arrlen)

vp110 发表于 2012-10-9 11:11:35

楼上说话很对。

数组长度应该是sizeof(arra)/sizeof(byte);

以前记得是这样求数组长度的,你试试看。

萧芸凤 发表于 2012-10-10 00:35:15

test01 发表于 2012-10-9 01:27 static/image/common/back.gif
sizeof函数的原理是编译时获得括号中参数的长度
你写的ar函数传递的只是一个 指针,在ar函数内用sizeof去测 ...

今天在办公室看了C++,的介绍,没有办法从函数内部得到数组长度只能是参数传递了

ttyp 发表于 2012-10-10 09:11:34

可以判断啊,循环判断指针的内容是否为'\0'就可以啊,就是太慢不划算
页: [1]
查看完整版本: 关于sizeof()函数的一个问题