OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4214|回复: 7

求助C语言指针问题

[复制链接]

145

主题

445

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-1-15
在线时间
350 小时
发表于 2015-6-7 18:47:51 | 显示全部楼层 |阅读模式
5金钱
#include <stdio.h>
unsigned char EE[3]={1,2,3};
unsigned char FF[3]={4,5,6};
struct xx
{
     unsigned char AA;
     unsigned char *BB;
     unsigned char *CC;
}*ss;

int main(void)
{
     ss->BB=EE;
    ss->CC=FF;
    while(1)
    {
        printf("%d\n",*(ss->BB + 1));//输出EE[1]
    }
    return 0;
}


如上:编译不通过(VS2012) 我的理解: ss->BB=EE;中BB是地址,ss->BB是放在指针ss指向的结构体中的指针,也就是地址,那么此语句是对的; printf("%d\n",*(ss->BB + 1));//输出EE[1] 这样写是不对的,实际指向了结构体的下一个元素,怎样写能达到我的目的呢?输出EE[1]?请尽量用指针表示。
PS:对于数组、结构体的使用我常用指针,这样好吗?除了有时候难理解外。

最佳答案

查看完整内容[请看2#楼]

问题应该在这句struct xx {...} *ss; 这里只定义了一个指向struct xx的指针,但是不存在指针指向的结构体,所以编译时可能通过,但运行时会导致内存泄漏。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-10-19
在线时间
2 小时
发表于 2015-6-7 18:47:52 | 显示全部楼层
问题应该在这句struct xx {...} *ss;
这里只定义了一个指向struct xx的指针,但是不存在指针指向的结构体,所以编译时可能通过,但运行时会导致内存泄漏。
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2015-6-8 08:22:34 | 显示全部楼层
頂一樓...

你沒有為ss分配可用空間...

要多加一行 

ss=(struct xx *)malloc(sizeof(struct xx));
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2015-6-8 08:38:40 | 显示全部楼层
ss在内存中没有实体
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

1

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-6-6
在线时间
2 小时
发表于 2015-6-8 14:32:35 | 显示全部楼层
struct xx 

……
}*ss;

改为:
struct xx 

……
} ss;
就好了。。
三更有梦书当枕,千里怀人月在峰!
回复

使用道具 举报

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
发表于 2015-6-8 14:51:45 | 显示全部楼层
struct不是这么用的
回复

使用道具 举报

145

主题

445

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-1-15
在线时间
350 小时
 楼主| 发表于 2015-6-8 18:48:40 | 显示全部楼层
回复【2楼】天呐你真高:
---------------------------------
谢谢,现在改了,ss只是一个地址,让ss指向一个定义好的struct xx OK;即 ss=&OK;对不?
回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-6-9 10:10:26 | 显示全部楼层
#include <stdio.h>
unsigned char EE[3]={1,2,3};
unsigned char FF[3]={4,5,6};
struct xx
{
     unsigned char AA;
     unsigned char *BB;
     unsigned char *CC;
};

struct xx SS;

int main(void)
{
    SS.BB=EE;
    SS.CC=FF;
    while(1)
    {
        printf("%d\n",*(SS.BB + 1));//输出EE[1]
    }
    return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 11:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表