我正在使用下面的代码并获得不同的值。
int *p;
printf("Size of *p = %d", sizeof(*p)); // Here value is 4
printf("Size of p = %d", sizeof(p)); // Here value is 8
任何人都可以解释一下,这到底是什么原因?
答案 0 :(得分:5)
对于任何指针变量B
,变量$yourArray = json_encode($yourArray,true);
本身就是指针,其大小就是指针的大小。 if(!empty($yourArray[0]['annual_income']) && $yourArray[0]['annual_income'] != ''){
// Not empty
}
是p
指向的对象,p
的大小是指向的对象的大小。
因此,当*p
报告p
时,您就会知道系统上的指针为*p
个字节,并且您可能是在64位系统上。
如果sizeof(p)
报告8
,则您知道8
的大小(在您的情况下,sizeof(*p)
指向的大小)是4
个字节,这在32位和64位系统上都是正常的。
通过执行int
和p
,您将获得相同的结果。
哦,还有最后一个音符:要打印4
(类型为sizeof(int*)
)的结果,那么您应该真正使用sizeof(int)
前缀和一个无符号类型说明符(因为sizeof
未签名)。例如size_t
。从技术上讲,不这样做是未定义的行为。
答案 1 :(得分:3)
sizeof(p)
是指针本身的大小。这取决于地址总线的大小。这意味着对于64位系统,地址总线大小将为64位(8字节),因此指针的长度为8个字节(表明您的系统为64位)。在32位系统上,其大小为32位(4字节)。
sizeof(*p)
是指针类型的大小,即int
。因此,int
通常为32位长,即4个字节。
答案 2 :(得分:2)
sizeof(*p)
返回指针指向的 type大小,而sizeof(p)
返回指针本身的输入大小。
对于您的机器上的*p = int
和sizeof(int) = 4
,您需要8
个字节来存储内存地址(p
指向的地址)。