OpenEdv-开源电子网

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

关于C语言的一点小问题。。

[复制链接]

21

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-6-8
在线时间
79 小时
发表于 2016-6-24 13:58:20 | 显示全部楼层 |阅读模式
1金钱
#include <stdio.h>
typedef struct
{
        int head;
        int tail;
        int size;
        int *data;
}FIFO;
void FIFO_Init(FIFO *f,int *buffer,int length)
{
        f->head = 0;
        f->tail = 0;
        f->size = length;
        f->data = buffer;
}
int buffer[] = {1,3,6,7};

int main()
{
        FIFO *fifo;
        FIFO_Init(fifo,&buffer[0],4);
        int tempbuffer = fifo->data[0];   
        int *tempbuf = fifo->data[1];
        //输出结果:1,3
        //我认为应该是*tempbuf = 3,所以tempbuf保存的不应该是地址吗?
        //为什么这样输出会是值?
        //请教一下大家,谢谢了   
        printf("%d,%d",tempbuffer,tempbuf);
        return 0;
}


最佳答案

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

FIFO *fifo;野指针,没有具体的地址值 定义变量,把它的地址传过去。 %d肯定是值了。%#X可以输出。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-6-24 13:58:21 | 显示全部楼层
本帖最后由 jiutianshenjian 于 2016-6-24 14:07 编辑

FIFO *fifo;野指针,没有具体的地址值
定义变量,把它的地址传过去。
%d肯定是值了。%#X可以输出。
小小蜗牛
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2016-6-24 14:01:00 | 显示全部楼层
本帖最后由 小温 于 2016-6-24 14:02 编辑

int *tempbuf = &fifo->data[1];     printf("%d,%d",tempbuffer,*tempbuf);
回复

使用道具 举报

21

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-6-8
在线时间
79 小时
 楼主| 发表于 2016-6-24 14:10:18 | 显示全部楼层
jiutianshenjian 发表于 2016-6-24 14:03
FIFO *fifo;野指针,没有具体的地址值
定义变量,把它的地址传过去。
%d肯定是值了。%#X可以输出。

%#X 输出是0X3。。。
回复

使用道具 举报

21

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-6-8
在线时间
79 小时
 楼主| 发表于 2016-6-24 14:13:17 | 显示全部楼层
小温 发表于 2016-6-24 14:01
int *tempbuf = &fifo->data[1];     printf("%d,%d",tempbuffer,*tempbuf);

你这样我试了下 输出结果是3 可是我觉得输出结构不应该是fifo->data[1]的地址么。。
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-6-24 14:14:08 | 显示全部楼层
FIFO fifo;
FIFO_Init(&fifo,&buffer[0],4);

或者用指针,但是要给fifo分配内存malloc。
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2016-6-24 14:17:06 | 显示全部楼层
我叫做大熙熙 发表于 2016-6-24 14:13
你这样我试了下 输出结果是3 可是我觉得输出结构不应该是fifo->data[1]的地址么。。

%d 是输出地址里面的值
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

21

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-6-8
在线时间
79 小时
 楼主| 发表于 2016-6-24 14:18:01 | 显示全部楼层
ysq7120 发表于 2016-6-24 14:14
FIFO fifo;
FIFO_Init(&fifo,&buffer[0],4);

不是 我的问题是int *tempbuf = fifo->data[1];这句话tempbuf存的为什么会是3这个值。。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-6-24 14:18:44 | 显示全部楼层
最大的问题就是指针都没指向,其他都是小问题。int *tempbuf = fifo->data[1];
这个编译不报错吗?一个int指针,一个int。
小小蜗牛
回复

使用道具 举报

21

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-6-8
在线时间
79 小时
 楼主| 发表于 2016-6-24 14:18:56 | 显示全部楼层
小温 发表于 2016-6-24 14:17
%d 是输出地址里面的值

那我就想看tempbuf这个的内容应该怎么输出
回复

使用道具 举报

21

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-6-8
在线时间
79 小时
 楼主| 发表于 2016-6-24 14:19:08 | 显示全部楼层
小温 发表于 2016-6-24 14:17
%d 是输出地址里面的值

那我就想看tempbuf这个的内容应该怎么输出
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-6-24 14:22:14 | 显示全部楼层
用指针,看6楼ysq7120给你写的,先定义变量,再取地址。
一个没有指向具体变量的指针不能乱用。
小小蜗牛
回复

使用道具 举报

21

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-6-8
在线时间
79 小时
 楼主| 发表于 2016-6-24 14:24:40 | 显示全部楼层
jiutianshenjian 发表于 2016-6-24 14:18
最大的问题就是指针都没指向,其他都是小问题。int *tempbuf = fifo->data[1];
这个编译不报 ...

没报错。。fifo->data[1]现在不是指针而是一个int型的常量了把?
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2016-6-24 14:26:34 | 显示全部楼层
int *tempbuf = fifo->data[1];
这一行把int型的数(就是3)赋值给指针型变量,编译器没报警吗?
可能因为指针也是32位的,有的编译器不报错,但是总该报警吧。

回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2016-6-24 14:26:47 | 显示全部楼层
int *tempbuf = fifo->data[1];
这一行把int型的数(就是3)赋值给指针型变量,编译器没报警吗?
可能因为指针也是32位的,有的编译器不报错,但是总该报警吧。

回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-6-24 14:27:08 | 显示全部楼层
我叫做大熙熙 发表于 2016-6-24 14:24
没报错。。fifo->data[1]现在不是指针而是一个int型的常量了把?

先把野指针解决了,再试后面的。
fifo->data是int*,fifo->data[1]就是int了。你左边可是int*
小小蜗牛
回复

使用道具 举报

21

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-6-8
在线时间
79 小时
 楼主| 发表于 2016-6-24 14:28:41 | 显示全部楼层
jiutianshenjian 发表于 2016-6-24 14:27
先把野指针解决了,再试后面的。
fifo->data是int*,fifo->data[1]就是int了。你左边可是int*

我把那个野指针解决了,现在就是后面那个tempbuf,我总觉得保存的是地址啊。。
回复

使用道具 举报

21

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-6-8
在线时间
79 小时
 楼主| 发表于 2016-6-24 14:29:28 | 显示全部楼层
xianshasaman 发表于 2016-6-24 14:26
int *tempbuf = fifo->data[1];
这一行把int型的数(就是3)赋值给指针型变量,编译器没报警吗?
可能因 ...

我觉得野应该报警的,但他没有报,我用的是C-Free5.0
回复

使用道具 举报

21

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-6-8
在线时间
79 小时
 楼主| 发表于 2016-6-24 14:30:52 | 显示全部楼层
关于那个int *tempbuf = fifo->data[1];
编译器就一个警告[Warning] C:\Users\Administrator\Desktop\CTest\76\main.c:23: warning: initialization makes pointer from integer without a cast
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2016-6-24 14:32:42 | 显示全部楼层
我叫做大熙熙 发表于 2016-6-24 14:19
那我就想看tempbuf这个的内容应该怎么输出

好好学习一下指针
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

21

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-6-8
在线时间
79 小时
 楼主| 发表于 2016-6-24 15:23:07 | 显示全部楼层
小温 发表于 2016-6-24 14:32
好好学习一下指针

那行代码在C中只是警告,在C++中是报错的
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2016-6-24 16:04:16 | 显示全部楼层
我叫做大熙熙 发表于 2016-6-24 15:23
那行代码在C中只是警告,在C++中是报错的

学习一下类型转换
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-6-24 16:32:46 | 显示全部楼层
我叫做大熙熙 发表于 2016-6-24 14:18
不是 我的问题是int *tempbuf = fifo->data[1];这句话tempbuf存的为什么会是3这个值。。

fifo你都没初始化,怎么能使用,这是最基础的东西,你都写错了,后面都不用理他是3,还是4,5,6。。。
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 16:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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