sizeof 与数组
来源:互联网 发布:中国编程语言排名 编辑:程序博客网 时间:2024/05/17 23:59
今天发现了一个小问题,函数形参定义为指针,然后传入了一个数组,在函数内部用sizeof得到数组的长度,发现一直是4不变,具体代码简化如下:
void test1(uint8_t *buf){ printf("buflen:%d\n",sizeof(buf));}uint8_t buf[10]=[1,2,3,4,5,6,7,8];int main(){ test1(buf);}结果为 buflen:4
考虑到可能是形参定义的是指针的缘故,后面改为定义为数组
void test2(uint8_t buf[]){ printf("buflen:%d\n",sizeof(buf));}uint8_t buf[10]=[1,2,3,4,5,6,7,8];int main(){ test2(buf);}结果为 buflen:4
结果还是4,这下真想不通了,然后继续试:
void test2(uint8_t buf[8]){ printf("buflen:%d\n",sizeof(buf));}uint8_t buf[10]=[1,2,3,4,5,6,7,8];int main(){ test2(buf);}结果为 buflen:4
结果依然是不是想要的,再想,假如我传入是整个数组的首地址呢,test1[&buf],test2[buf],结果依然是4。
仔细回想一下buf[10],buf—数组名,数组的首个成员的地址;&buf–整个数组的地址;&buf[0]数组的首个成员的地址。当将buf传入函数时,传入的不是数组名,而是数组的地址或者首个元素的地址,那么在函数内部用sizeof(buf)得到的始终是地址的长度,32位系统下,任何地址的长度都是四个字节,所以始终得到结果为4。
如果函数内部要用到数组的长度,那么只能在形参里定义一长度变量,用于传入数组长度。最好的办法是是宏定义一个长度:
#define BUF_LEN 1024uint8_t buf[BUF_LEN];
为了进一步理解buf与&buf区别,右做了一下代码:
unsigned char buf[10] = {1,2,3,4,5,6,7,8};void test1(uint8_t *buf){ printf("buflen:%d\n",sizeof(buf)); printf("bufaddr:%d\n",buf); printf("bufaddr:%d\n",buf+1);}void test2(uint8_t buf[]){ printf("buflen:%d\n",sizeof(buf)); printf("bufaddr:%d\n",buf); printf("bufaddr:%d\n",buf+1);}int main(){ printf("***********************************\n"); test1(buf); test1(&buf); test2(buf); test2(&buf); printf("buflen:%d\n",sizeof(buf)); printf("buf:%d\n",buf); printf("buf:%d\n",buf+1); printf("&buf+1:%d\n",&buf+1); //为buf + sizeof(buf) printf("***********************************\n"); }
运行结果:
由此可见,数组作为实参传入函数的都是首个成员变量的地址。至于为什么是这样,有空再进行深入研究。
0 0
- sizeof 数组与指针
- 数组与关键字sizeof()
- 指针数组与sizeof
- sizeof与数组
- sizeof 数组与指针
- sizeof与数组
- sizeof与数组
- sizeof与数组名
- 变长数组与sizeof
- sizeof 与数组
- sizeof与二维数组
- sizeof 数组与指针
- sizeof(数组名) 与 sizeof(指针)
- sizeof关键字与数组本质
- sizeof与数组和指针
- sizeof(数组名)与sizeof(指针变量)
- sizeof()与 数组长度获取
- c/c++数组与sizeof的基础知识
- Paint的setXfermode属性
- linux指令 -- head与tail
- ACM题集以及各种总结大全
- Java回顾之反射
- 操作DB~~对数据的增删改查!!sql语句
- sizeof 与数组
- linux 镜像安装系统包
- 杂记
- BZOJ 1013, 球形空间产生器
- 跑得快—扑克牌游戏出牌规则(JavaScript)
- 学习体会
- 分页技术
- 认识共振的自己
- JavaScript笔记(一)