array[0]
这是我的一些示例代码。数组是整数类型。所以,TOTAL_ELEMENTS
也是一个整数。整数除以整数应该产生一个整数。但是,当我尝试使用sizeof()
运算符查找create or replace function Date(EffDt varchar,EffDt varchar)
RETURNS VARCHAR STABLE AS $$
from dateutil.parser import parse
import datetime
from datetime import timedelta
if len(EffDt)>0 and len(Pay)>0:
dt=parse(EffDt)
if dt.month and dt.day==1:
NewDate=dt
else:
if Pay=="Weekely":
value=datetime.date(dt.year, dt.month, dt.day).weekday()
if value==1:
NewDate= dt + timedelta(days=1)
elif value==2:
NewDate = dt
elif value==3:
NewDate=dt+timedelta(days=6)
elif value==4:
NewDate=dt+timedelta(days=5)
elif value==5:
NewDate=dt+timedelta(days=4)
elif value==6:
NewDate=dt+timedelta(days=3)
elif value==7:
NewDate=dt+timedelta(days=2)
else :
pass
if Pay=="Monthly":
strvalue=dt.strftime('%Y/%m/%d')
if strvalue[:2]=="15":
strDate=str(dt.month)+"/16/"+str(dt.year)
NewDate=parse(strDate)
elif strvalue[:3]=="01":
NewDate=dt
else :
strDate=str(dt.month+1)+"/01/"+str(dt.year)
NewDate=parse(strDate)
else :
NewDateValue="1/1/1990"
NewDate=parse(NewDateValue)
mm=NewDate.month
yyyy=NewDate.year
print(yyyy)
if len(str(mm))==1:
mm="0"+str(mm)
dd=NewDate.day
if len(str(dd))==1:
dd="0"+str(dd)
_date=str(yyyy) +str(mm)+str(dd)
return _date
$$ LANGUAGE plpythonu;
的大小时,它显示8个字节。为什么??
答案 0 :(得分:7)
您对宏的使用扩展为类似sizeof (sizeof ....)
的内容。由于sizeof
的结果是size_t
,因此您获得sizeof (size_t)
,这在您的平台上显然是8。
你可能想要
printf("%zu\n", TOTAL_ELEMENTS);
(注意%d
是size_t
的错误转换说明符,一个好的编译器至少会警告你的版本。)
这是一个有效的完整程序:
#include <stdio.h>
int main()
{
int array[] = {23,34,12,17,204,99,16};
size_t const TOTAL_ELEMENTS = (sizeof array) / (sizeof array[0]);
printf("%zu\n", TOTAL_ELEMENTS);
}
输出:
7
请注意,我将TOTAL_ELEMENTS
设为普通对象,因为此处不需要将其作为宏。如果您想要一个替换数组名称的版本,您可能需要它作为宏,如下所示:
#define TOTAL_ELEMENTS(a) (sizeof (a) / sizeof (a)[0])
然后你写:
printf("%zu\n", TOTAL_ELEMENTS(array));
答案 1 :(得分:3)
当您使用#define
时,预处理器会将TOTAL_ELEMENTS
替换为(sizeof(array) / sizeof(array[0]))
。
(sizeof(array) / sizeof(array[0]))
的结果类型是size_t
。在sizeof
上使用size_t
运算符时,它将返回其大小。在你的情况下是8个字节。
答案 2 :(得分:2)
<select multiple class="commits2 form-control" size="9">
根据6.5.3.4p5
$('option').mousedown(function(e) {
e.preventDefault();
$(this).prop('selected', $(this).prop('selected') ? false : true);
return false;
});
类型的尺寸
您平台的sizeof
为size_t
。
答案 3 :(得分:0)
sizeof
返回项目的大小,以字节为单位。由于很多类型都比单个字节大,所以如果你有一个数组,确定其大小元素的一种方法是获取数组的总大小(以字节为单位),然后将其除以它由 - 组成的元素类型的大小 - 并且该类型将位于数组的第一个元素中,索引为0。
例如,如果我有一个int
的数组,并且int
在我的平台上是4个字节,那么它在内存中会是这样的
Item 0 | Item 1 | Item 2
4bytes | 4bytes | 4bytes
sizeof(array)
将是12,即数组的总大小(以字节为单位)。 sizeof(array)/sizeof(array[0])
将为3,即数组中元素的总大小。
您在代码中使用宏错误。你应该使用:
printf("%zu", TOTAL_ELEMENTS);
否则代码会扩展为sizeof(sizeof ...)
,如果你实际上在数组中的元素长度之后,那么这不是你想要的。 sizeof(sizeof(something))
会在您的平台上返回size_t
类型的大小,这就是您看到8的原因。