在sizeof()函数中使用和不使用*运算符时,为什么指向struct变量的指针大小有所不同?

时间:2017-05-05 12:33:50

标签: c++

using namespace std;
#include<iostream>
int main()
{
struct node
{
    int data;
    struct node *next;
};

struct node *node1;

node1 = (struct node*)malloc(sizeof(node));

node1->data = 5;
node1->next = NULL;

cout<<"node data value "<<node1->data<<endl;

int *vara;

cout<<"size of struct node pointer with * "<<sizeof(*node1)<<endl; // size is 8
cout<<"size of struct node pointer without * "<<sizeof(node1)<<endl; // size is 4
cout<<"size of integer pointer variable with * "<<sizeof(*vara)<<endl; // size is 4
cout<<"size of integer pointer variable with * "<<sizeof(*vara)<<endl; // size is 4 in this case as well

}

为什么在与*运算符和没有*运算符一起使用指针结构变量的指针时,大小会有所不同?

在CodeBlocks,Language C ++中执行上述代码。

4 个答案:

答案 0 :(得分:2)

简答:因为node1是一个指针而*node1是一个node,而且它们的大小不同。

更长的回答:

让我们检查您传递给sizeof运算符的每个表达式的类型:

  1. *node1的类型为node,其中包含intnode*,两者的平台大小均为4字节,因此总大小为8字节。
  2. node1的类型为node*指针。在您的平台上,指针长度为4个字节。
  3. *vara的类型为int为整数。在您的平台上,整数长度为4个字节。
  4. vara的类型为int*指针。在您的平台上,指针长度为4个字节。

答案 1 :(得分:1)

第一个sizeof返回结构的大小(int的大小+指针的大小),第二个是指针的大小一个struct(你的机器上有4个字节),第三个是整数的大小。

答案 2 :(得分:0)

这是因为在这种情况下,指针的大小(4个字节)与整数相同,但是node结构的大小为8个字节。 当sizeof(a)是指针时请求a时,您要求指针的大小。当您要求sizeof(*a)时,您会询问a指向的内容的大小。

答案 3 :(得分:0)

  

与&#34;&#34;一起使用时,为什么尺寸会有所不同?操作员和没有&#34;&#34;指向结构变量的指针的运算符?

因为它们是不同的类型。在本声明中:

node *ptr;

ptr的类型为pointer to node,而*ptr的类型为node。在您的第三个和第四个示例中,您希望比较intint *。您为int *int获得相同大小这一事实只是巧合而在您的平台上碰巧是相同的。你既不能依赖它,也不能从这个事实中推断出任何规则。