关于结构体中的结构体想用指针调用出现的问题(未解决)

博客提到编程中出现变量不是类成员、未定义的错误,写两个定义编译不出错但运行无输出。博主想用结构指针的办法解决问题以实现输出,目前尚未解决。

以下会出现错误说s不是class1的成员变量:‘s’ : is not a member of ‘class1’

 #include "stdio.h"
    int main()
    {
        struct student{
            int age;
            int stu_class;
        };
        struct class1{
            struct student s1;
        };
        struct class1 *c;
        struct class1 cc;
    	struct student *s;
        cc.s1.age=9;
        cc.s1.stu_class=2;
        s=&(cc.s1);
        c=&cc;
        printf("%d",c->s->age);
        return 0;
    }

这样会出现说s没有定义:‘s’ : undeclared identifier

然后如果写两个定义的话编译不会出错,但运行结果不会输出,如下:

#include "stdio.h"
int main()
{
    struct student{
        int age;
        int stu_class;
    };
    struct class1{
        struct student s1;
		struct student *s;
    };
    struct class1 *c;
    struct class1 cc;
	struct student *s;
    cc.s1.age=9;
    cc.s1.stu_class=2;
    s=&(cc.s1);
    c=&cc;
    printf("%d",c->s->age);
    return 0;
}

我知道如下方法可行可以输出9,但我就是想用结构指针的办法,有没有什么可行的方法?未解决。

#include "stdio.h"
int main()
{
    struct student{
        int age;
        int stu_class;
    };
    struct class1{
        struct student s1;
    };
    struct class1 *c;
    struct class1 cc;
    cc.s1.age=9;
    cc.s1.stu_class=2;
    c=&cc;
    printf("%d",c->s1.age);
    return 0;
}
在C语言中,结构体是一种用户自定义的数据类型,它可以包含不同类型的数据成员。如果结构体中含有指针,则需要特别注意内存分配以及如何正确访问数据。 ### 结构体中有指针的情况 假设我们有一个简单的例子: ```c #include <stdio.h> #include <stdlib.h> typedef struct { int *value; } MyStruct; int main() { // 分配动态内存给指针 MyStruct ms; ms.value = (int *)malloc(sizeof(int)); if(ms.value == NULL) { printf("Memory allocation failed\n"); return 1; } *ms.value = 42; // 输出值 printf("Value in structure is %d\n", *(ms.value)); // 释放动态内存 free(ms.value); return 0; } ``` 在这个示例中,`MyStruct` 包含了一个指向整型变量的指针 `value`。以下是关键步骤解释: 1. **初始化** - 在使用之前一定要先对指针进行初始化或者分配内存空间。例如这里通过 `malloc()` 函数为 `value` 指向的空间进行了动态内存分配。 ```c ms.value = (int *)malloc(sizeof(int)); ``` 如果没有这一步就直接解引用 (`*`) 这个未初始化的指针,将会导致不可预测的行为甚至程序崩溃。 2. **赋值与读取** 经过成功分配内存之后可以像对待普通变量一样操作它所指向的内容了。 ```c *ms.value = 42; ``` 3. **释放资源**: 当不再需要该块由 malloc 提供的内存时,请记得调用 free 来归还这部分资源以免发生泄漏。 ```c free(ms.value); ``` 需要注意的是,在实际应用过程中应始终检查 `malloc()` 的返回结果是否为空以防因系统原因无法满足请求而导致错误;另外当函数结束前应当清理掉所有已经分配出去但不再使用的堆上区域以避免“野”指针引发的问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值