结构体指针的理解

以前总有一种疑惑。为什么结构体的指针有的需要用分配空间有的不需要分配空间呢?现在总结一下思路。先上代码。


#include <stdio.h>
#include <string.h>
#include <malloc.h>
/*先定义几类结构体*/
struct str{
int a;
int b;
}str1;
/*这是第一类结构体的形式,有结构体名,有结构体变量*/
struct str2{
int a;
int b;
};
/* 这是第二类结构体的形式,有结构体名,无结构体变量 */
typedef struct {
int a;
int b;
}STR3;
/* 这是第三类结构体的形式,把结构体重定义为STR3 */
typedef struct str4{
int a;
int b;
}STR4;
/*这是第四类结构体的形式,把结构体重定义为STR4,还有结构体名称*/
void main()
{
    /*定义各类的指针*/
    struct str *p;
    struct str2 *p2;
    STR3 *p3;
    struct str4 *p4;
    STR4 *p5;
    /*-----------------------------------------------*/
    p = &str1; /*结构体指针指向结构体变量的地址首地址*/
    p->a=1;
    p->b=2;
    printf("p->a=%d,p->b=%d\n",p->a,p->b);
    /*-----------------------------------------------*/
    p2 = (struct str2 *)malloc(sizeof(struct str2)); /*为结构体指针分配对应结构体类型的大小的首地址*/
    p2->a=1;
    p2->b=2;
    printf("p2->a=%d,p2->b=%d\n",p2->a,p2->b);
    /*-----------------------------------------------*/
    p3 = (STR3 *)malloc(sizeof(STR3)); /*为结构体指针分配对应结构体类型的大小的首地址*/
    p3->a=1;
    p3->b=2;
    printf("p3->a=%d,p3->b=%d\n",p3->a,p3->b);
    /*-----------------------------------------------*/
    p4 = (struct str4 *)malloc(sizeof(struct str4));/*为结构体指针分配对应结构体类型的大小的首地址*/
    p4->a=1;
    p4->b=2;
    printf("p4->a=%d,p4->b=%d\n",p4->a,p4->b);

    struct str4 str4a;
    p4 = &str4a;/*结构体指针指向结构体变量的地址的首地址*/
    p4->a=1;
    p4->b=2;
    printf("p4->a=%d,p4->b=%d\n",p4->a,p4->b);
    /*--------------------------------------------------*/
    /*-----------------------------------------------*/
    p5 = (STR4 *)malloc(sizeof(STR4));/*为结构体指针分配对应结构体类型的大小的首地址*/
    p5->a=1;
    p5->b=2;
    printf("p5->a=%d,p5->b=%d\n",p5->a,p5->b);

    p5 = &str4a;/*结构体指针指向结构体变量的地址的首地址*/
    p5->a=1;
    p5->b=2;
    printf("p5->a=%d,p5->b=%d\n",p5->a,p5->b);
    /*--------------------------------------------------*/
}

以上就是结构体指针的所有用法。总结来说,就是如果定义了结构体指针,你就得给他一个指向的地址。可以通过两种方式:
1:就是指向结构变量的首地址,注意是结构体变量的首地址,不是结构体的首地址,结构体是没有首地址的,它就是一个类型,类似int a的int ,变量a有地址,但是int是没地址的。所以不要指向自己定义的结构体名或者是结构体。而是结构体变量。
2:分配一段空间,让结构体指针指向这个空间。这个空间要是结构体指针对应结构体(结构体名)的大小。注意结构体有大小的,类似int a的int 有大小。

猜你喜欢

转载自blog.csdn.net/weixin_36209467/article/details/82261286