鸦领主 发表于 2021-1-8 13:38:33

C语言学习 语法补充

本帖最后由 鸦领主 于 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]
查看完整版本: C语言学习 语法补充