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 ++中执行上述代码。
答案 0 :(得分:2)
简答:因为node1
是一个指针而*node1
是一个node
,而且它们的大小不同。
更长的回答:
让我们检查您传递给sizeof
运算符的每个表达式的类型:
*node1
的类型为node
,其中包含int
和node*
,两者的平台大小均为4字节,因此总大小为8字节。node1
的类型为node*
,指针。在您的平台上,指针长度为4个字节。*vara
的类型为int
,为整数。在您的平台上,整数长度为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
。在您的第三个和第四个示例中,您希望比较int
与int *
。您为int *
和int
获得相同大小这一事实只是巧合而在您的平台上碰巧是相同的。你既不能依赖它,也不能从这个事实中推断出任何规则。