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.变量定义回收与大括号

上图所示,大括号的作用
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 效果相同

4.define 重复定义的问题
由于编译器预处理命令是顺序进行,因此define定义是最后一个define的值
比如
#define a 1
#define a 2
#define a 3
printf("%d\n", a);
3
https://blog.youkuaiyun.com/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))
不过总觉得这样的办法不是很好
本文详细解析了C语言中结构体的两种访问方式:成员访问运算符'.'与指向成员运算符'->'的区别及应用场景,并介绍了变量定义规则、内存分配函数重定义等内容。

被折叠的 条评论
为什么被折叠?



