C语言中若干问题

1.C语言结构体使用”->”与”.”区别

1.”->”用于指向结构成员,它的左边应为指向该结构类型的指针(结构指针)

2.”.”的左边应为该结构类型的变量(结构变量)

比如

typedef struct{
    unsigned int x;//目标的x坐标
    unsigned int y;//目标的y坐标
    unsigned int w;//目标的宽度
    unsigned int h;//目标的高度

}RESULT;//识别结果

RESULT Result;
RESULT *Resu

Result.x = x0;
Result.y = y0;

Resu->x=Result.x;
Resu->y=Result.y;
Resu->w=Result.w;
Resu->h=Result.h;   

两个运算符号的优先级相同,但是”->”用于指向结构成员,它的左边应为指向该结构类型的指针(结构指针),而”.”的左边应为该结构类型的变量(结构变量)。举个例子,这个结构有个结构指针structpoint,有个该结构类型的变量student,其中structpoint指向student,即*structpoint=student,那么structpoint->name=(*structpoint).name=student.name

2.变量定义回收与大括号

mark

上图所示,大括号的作用
1.定义变量只能在大括号跟前定义,比如y1_2
2.大括号定义作用于,y1_2在大括号外边无效

3.接着问题2,变量定义只能紧跟大括号的问题

在keil MDK中默认使用的是C89版本C语言编译,而C89不支持在程序内部定义变量,只能在函数开始定义

for (unsigned char i = 0 ; i < 10 ; i++)
{

}

因此需要keil MDK选择C99模式编译,方法如下
勾选C99 mode跟在misc Controls 输入 –c99 效果相同

mark

4.define 重复定义的问题

由于编译器预处理命令是顺序进行,因此define定义是最后一个define的值
比如

#define  a  1
#define  a  2
#define  a  3
printf("%d\n", a);

3

https://blog.csdn.net/jiangxinyu/article/details/7780211

5.malloc 等内存分配函数的重定义

函数原型为

在stdlib.h中声明

extern _ARMABI void *malloc(size_t /*size*/);

可以在 #include “stdlib.h”后重新定义 malloc

比如:

#define malloc(size) (mymalloc(SRAMEX, size))

不过总觉得这样的办法不是很好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值