永发信息网

C++ size_t 问题

答案:3  悬赏:80  手机版
解决时间 2021-11-14 22:10
  • 提问者网友:轻浮
  • 2021-11-14 18:53
C++ size_t 问题
最佳答案
  • 五星知识达人网友:掌灯师
  • 2021-11-14 19:57
#include "stdafx.h"
#include
#include

size_t size_how(int (&ia)[3])
{
return sizeof(ia) / sizeof(*ia);
}

void main()
{
int ia[] = {1,2,3};
std::cout << size_how(ia);
}
数组作为形参的时候,你的写法不对,丢失了数组的信息。
全部回答
  • 1楼网友:狂恋
  • 2021-11-14 22:44
1 一般项目里都用类似于 ARRAYSIZE(定义于winnt.h)的宏,来做这件事。

winnt.h中的定义为
#define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
#define _ARRAYSIZE(A) RTL_NUMBER_OF_V1(A)
#define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))

这里有v1,v2 两个版本的宏,你看v1的比较好理解,是最常用的。v2如果你c++基础好的话,看winnt.h里面的注释也能懂。

2 至于你的函数的做法,为什么失败,是因为数组类型在参数传递的时候,转型退化成了 int*,所以函数体里面的代码的 sizeof(ia)就不再是一个数组的大小,而是一个int*的大小了。
要用函数来实现,你其实需要的是一个函数模板,具体看我上面提到的v2版本,如果看不懂,就用最简单,最常用的宏的方式吧,也就是v1。
而2楼的回答虽然说明了你错的原因,但是对你没用,你如果函数声明里都要写明你数组有几个元素了,何必多此一举,直接不就能代码里硬码你的数组大小了。

参考资料:干这行的经验,winnt.h

  • 2楼网友:雪起风沙痕
  • 2021-11-14 21:10
指针作为形参取sizeof当然是4(数组做形参也一样),在函数体外取sizeof即可,再添加整型数组长度作为形参。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯