sizeof(* p)和sizeof(p)之间的区别?

时间:2018-08-16 05:25:58

标签: c sizeof

我正在使用下面的代码并获得不同的值。

int *p;

printf("Size of *p = %d", sizeof(*p));   // Here value is 4

printf("Size of p = %d", sizeof(p));    // Here value is 8

任何人都可以解释一下,这到底是什么原因?

3 个答案:

答案 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位系统上都是正常的。

通过执行intp,您将获得相同的结果。

哦,还有最后一个音符:要打印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 = intsizeof(int) = 4,您需要8个字节来存储内存地址(p指向的地址)。

相关问题