关于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:46 编辑
sizeof函数的原理是编译时获得括号中参数的长度
你写的ar函数传递的只是一个 指针,在ar函数内用sizeof去测arra,就是得到指针变量的长度,而不是数组长度
要直接在loop内用sizeof(arr)得到数组长度赋值给一个变量,比如arrlen=sizeof(arr);,然后ar(arr,arrlen);
void ar(byte *arra,int arrlen) 楼上说话很对。
数组长度应该是sizeof(arra)/sizeof(byte);
以前记得是这样求数组长度的,你试试看。 test01 发表于 2012-10-9 01:27 static/image/common/back.gif
sizeof函数的原理是编译时获得括号中参数的长度
你写的ar函数传递的只是一个 指针,在ar函数内用sizeof去测 ...
今天在办公室看了C++,的介绍,没有办法从函数内部得到数组长度只能是参数传递了 可以判断啊,循环判断指针的内容是否为'\0'就可以啊,就是太慢不划算
页:
[1]