极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11279|回复: 4

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

[复制链接]
发表于 2012-10-8 22:53:13 | 显示全部楼层 |阅读模式
先看一下程序


  1. void ar(byte *arra)
  2. {

  3.   int n = sizeof (*arra) / sizeof (arra[0]);
  4.   
  5.   Serial.print(" sizeof (arra)  = ");
  6.   Serial.println(sizeof (arra));
  7.   Serial.print("  sizeof (arra[0]  = ");
  8.   Serial.println( sizeof (arra[0]));
  9.         
  10.   byte a[n];

  11.   for ( int i = 0 ; i < n  ; i++)
  12.   {
  13.     arra[i] = i*3;
  14.   }
  15.        
  16. }

  17. void setup()
  18. {
  19.   Serial.begin(9600);
  20. }
  21. void loop()
  22. {      
  23.   byte arr[7];
  24.    ar(arr);
  25.   for (int i = 0 ; i <7 ; i++)
  26.   Serial.println(arr[i]);
  27. }
复制代码


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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 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)
回复 支持 反对

使用道具 举报

发表于 2012-10-9 11:11:35 | 显示全部楼层
楼上说话很对。

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

以前记得是这样求数组长度的,你试试看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-10 00:35:15 | 显示全部楼层
test01 发表于 2012-10-9 01:27
sizeof函数的原理是编译时获得括号中参数的长度
你写的ar函数传递的只是一个 指针,在ar函数内用sizeof去测 ...

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

使用道具 举报

发表于 2012-10-10 09:11:34 | 显示全部楼层
可以判断啊,循环判断指针的内容是否为'\0'就可以啊,就是太慢不划算
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-28 23:49 , Processed in 0.066875 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表