打印
[通用8051核FLASH系列]

指针在结构体中的运用

[复制链接]
772|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zerorobert|  楼主 | 2023-12-23 13:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

指针是C语言中的难点,很多人对他的使用掌握的不是很好,使用过程中出现很多的问题。
    使用指针的时候需要注意几点:
    1、分配空间
    2、初始化
    3、释放


这些可能很多人都知道,但是用的时候往往会忘记做这些工作,这带来的结果就是“段错误”,对于初学者,这个错误很难定位。可谓是深恶痛绝吧。


常出现的错误有几种
    1、指针没有初始化。
    2、越界。
    3、指针free掉后,被使用。


我这里说的是,指针在结构体中的运用。


可能你定义一个结构体如:
    typedef struct test1
    {
        int a;
        int b;
        char * c;
    }test1_t;


typedef struct test2
    {
        char *d;
        test1_t *e;
    }test2_t;


很多时候我们使用这个结构体类型的时候只是定义一个变量。如:


test2_t *test_struct;


且为其分配空间


test_struct = (test2_t *)malloc(sizeof(test2_t));


这样就结束了吗,我们就可以对结构体中的数据进行操作了吗,答案是不,


我们对test_sruct->c操作时发现c也是一个指针变量,那么我们也必须为他分配空间,同样,test_sruct->e,test_sruct->e->c都得为其分配空间,也就是说这种情况下我们应该一层一层的为他们去分配空间,避免漏掉,出现错误。


空间申请了,我们也使用了我们也使用了,那么是不是就结束了,呵呵,还差一步,等这些分配了的空间没用了的时候,我们一定要将他们free掉,可能你说,我写得程序从来不用干这个也没事呀,其实不然,这只是说明你的程序足够的小,系统资源足够负担这些浪费掉的空间,当你的程序足够大的时候,你可能对这些空间斤斤计较了,free掉没用空间是一个号的习惯。


使用特权

评论回复
沙发
tpgf| | 2024-1-17 16:46 | 只看该作者
我们在不经意间就会使用到指针

使用特权

评论回复
板凳
heimaojingzhang| | 2024-1-17 17:25 | 只看该作者
free掉这些空间是自动的释放还是需要手动释放呢

使用特权

评论回复
地板
renzheshengui| | 2024-1-17 18:02 | 只看该作者
操作结构体的指针是一个容易出问题的活

使用特权

评论回复
5
wakayi| | 2024-1-17 21:00 | 只看该作者
只要是操作结构体 就避免不了对指针的使用

使用特权

评论回复
6
paotangsan| | 2024-1-17 22:01 | 只看该作者
结构体的大小取决于结构体数据总的大小还是最大的数据的大小呢

使用特权

评论回复
7
keaibukelian| | 2024-1-17 22:37 | 只看该作者
指针都已经被释放掉了  怎么还能再使用呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

1293

帖子

0

粉丝