请问一下大家结构体命名加'*'和不加'*'的区别在哪里
问题描述:
想问一下结构体这部分,加'*'就相当于是命名了一个结构体指针,所以按上图我开始是这么写的
typedef struct node
{
int data[length];
struct node*next;
}node;
typedef struct snode
{
node *head,*rear;
}*linkstring;
//然后我在初始化的时候就这样子写
bool init_string(linkstring &s)
{
s->head=s->rear=(node*)malloc(sizeof(node));
s->rear->next=NULL;
}
然后编译出来就会显示内存冲突,我把他改成像图中一样的普通的结构体类型,编译又可以通过了,所以想问一下这个是为什么呢?是因为指针不能这样子分配内存吗?
答
指针的内存分配需要靠new或者malloc才行。不管是一个变量指针还是一个结构体指针或是一个类指针都需要new或这malloc以分配内存。
如果你希望linkstring是一个指针,可通过类似以下方式实现
typedef struct snode
{
node *head,*rear;
};
int main() {
snode *linkstring; //定义指针
linkstring = (snode*)malloc(sizeof(snode)); //分配内存
init_string(linkstring); //最后再使用指针
}
答
加*就是结构体指针,可以用malloc分配空间
答
typedef struct snode
{
node *head,*rear;
}*linkstring;
这样写的时候,linkstring是一个指针类型,linkstring s;这时候的s是没有分配内存空间的。这样使用前,程序猿必须手动给s分配内存。
而
typedef struct snode
{
node *head,*rear;
}linkstring;
这样写的时候,linkstring是一个非指针类型,linkstring s;这样用的时候,系统会自动给s分配内存(临时变量由系统自动分配内存),所以,这时候s是有内存空间的。