关于内存分配,结构体定义式多定义了一个指针的情况
typedef struct node{
int a;
int b;
}Node, *ANode;
那么为变量
Node P
和 为变量 ANode Q
创建空间
P=(Node *)malloc(sizeof(Node));
和 Q=(ANode)malloc(sizeof(ANode));
区别在哪里
Node P ---这个定义 的节点对象实例
和 为变量 ANode Q ---这个定义了一个指向对象实例的指针
创建空间
P=(Node *)malloc(sizeof(Node)); 所以不能讲指针赋值给一个对象
和 Q=(ANode)malloc(sizeof(ANode)); 定义有错,将4字节的内存强制转换为node指针,极其容易内存越界啊。
正确用法是ANode Q=(ANode)malloc(sizeof(Node));
sizeof会不同,第一个是结构体大小,第二个是指针大小4
#include<iostream>
using namespace std;
typedef struct node{
int a;
int b;
}Node, *ANode;
int main()
{
cout << sizeof(Node) << endl;
cout << sizeof(ANode) << endl;
}
输出
8
4
第一个sizeof得到的是结构体的长度,8个字节,第二个,因为是指针,就是4个字节
1.Node P 的时候p已经有 内存空间了
P=(Node *)malloc(sizeof(Node));这种写法是错误的吧,你给的P是一结构体对象,malloc返回的是一个地址,把地址赋给结构体对象是不对的。
Node P ;
P=(Node *)malloc(sizeof(Node));
这种做法是有问题的,你将指针赋值给了一个实例
应该是Node *P;