C语言中若干问题

原创 2018年04月15日 16:53:52

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))

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

版权声明:本文为博主原创文章,未经博主允许不得转载。有任何问题请联系QQ:353973314 https://blog.csdn.net/Name_006/article/details/79950727
收藏助手
不良信息举报
您举报文章:C语言中若干问题
举报原因:
原因补充:

(最多只允许输入30个字)