查看: 294|回复: 0

[原创图文] C语言学习 语法补充

[复制链接]

22

主题

31

帖子

3

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
251
荣耀
0
rank
0
违规
0
发表于 2021-1-8 13:38:33 | 显示全部楼层 |阅读模式
本帖最后由 鸦领主 于 2021-1-8 13:38 编辑

1.预编译语句

a)#define:常量定义,原理是编译器强制替换
#define p 12.566
int i=10;
double d=i*i*p;//这里编译器会将p替换为12.566

宏函数

#include<stdio.h>
#define max(a,b) a>b?a:b; //这俩个函数同理,比真实的函数节省系统资源
/*int max(int a, int b)         //编译出来的文件尺寸可能会大些
{//求最大值
    return a > b ? a : b;
}*/
int main()
{
    int n = 10, b = 32;
    max(n,b)
    return 0;
}



b).typedef:是用于对类型重新定义
书写上define定义的类型名在前结尾不加分号,而typedef类型名在后加分号。
typedef int time;//将int取一个新名字叫time,类项名可自定义
#define time int  //将int取一个新名字叫time,类项名可自定义
struct used
{
  time a;
  used*u;
};
typedef used*  New;//这里直接是将used*定义成了New
new a = NULL; //New等于used*,也不用再加*号
#define next int *;
//与define定义的区别是
New p , p1;//俩个都是指针变量型,都是used*
next a1,a2;//只有第一个是指针变量,后面的都是整数类型的
</span>

将不好书写的语句,定义成方便书写的
typedel unsigned int uint
//定义unsigned int 类型的方便
uint i=32;//unsigned int 类型

c)include包含语句
#include<stdio.h>//尖括号表示只在系统文件中找到包含
#include"stdio.h"//双引号表示优先在当前工程目录下查找,没有在去系统文件中

d)ifdef

#include<stdio.h>
#define test //加上这句ifdef里面的东西将会执行,else里面不会执行,否者相反

int main()
{
#ifdef test//可自定义名
    printf("当前是测试");
#else
    printf("当前是正版");
#endif //结束
    return 0;
}


2.常量定义
定义方式包括#define const enum

const定义的方式
const int i=12//定义的这个数将不能修改
//必须初始化指定值,也只能再初始化时指定值


enum整数常量定义方式
enum Etest
{
    test,
    test1,
    test2=45,
    test3,
};
如果第一个常数未指定那么默认为0,依次向下+1
如果遇到指定了,那么会变成指定了那个数,在依次向下+1
使用枚举系列定义常量的优点是可以自动无重复
列如:大量通讯协议中,协议号的定义

2.常量指针和指针常量
const int i=10;
const int *p=&i;//这个叫做常量指针

int t=10;
int* const p1=&t;//这个叫做指针常量
常量指针的特点:禁止赋值,允许偏移,允许读取
*p = 32;//错误,不可以赋值
p = p+1//正确,允许偏移
int c =*p //正确,允许读取
指针常量的特点:允许赋值,禁止偏移,允许读取
*p = 32;//正确,可以赋值p = p+1//错误,不允许偏移
int c =*p //正确,允许读取


3.位结构体
struct结构体名
{
成员类型 成员变量名:位;(常量)
成员类型 成员变量名:位;(常量)
};
一个结构体有32位 可以分配,可以合理的利用
位就是二进制数的一位数,比如分配3位,那么能使用的数就是0-7

一般成员类型前都加unsigned,如果有符号的话过半就会变成负数





温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
学逆向论坛-免费的逆向学习论坛
微信扫一扫即可使用手机论坛
快速回复 返回顶部 返回列表