C高级(学习)2024.8.2
创始人
2024-11-13 09:38:55
0

目录

1.指针函数

概念

格式

2.函数指针

概念

格式

基本用法

3.函数指针数组

概念

格式  

4.共用体

格式

定义共用体变量

特性

5.枚举

定义

格式

6.存储类型

(1)auto

(2)static

(3)extern

(4)register

7.条件编译

(1)根据宏是否定义

(2)根据宏值

(3)防止头文件重复包含(放在头文件中)

1.指针函数

概念

        本质是函数,返回值是指针

格式

数据数据 *  函数名(形参)
{
        函数体
        return  地址;//失败则返回NULL
}

2.函数指针

概念

        本质是指针,指向的是函数

格式

数据类型 (*指针名)(参数列表);
数据类型: 与指向函数的返回值类型保持一致
参数列表:与指向函数的参数列表保持一致

基本用法

1.用作函数指针

int add(int a, int b)
{
        return a + b;
}

int main()
{
        int (*p)(int, int);
        p = add;
        printf("%d\n", p(2, 3));

}

2.函数指针作为另一个函数的参数,实现接口重用-->多态

int add(int a, int b)
{
        return a + b;
}

int test(int (*p)(int ,int))
{
        printf("test:%d\n",p(3,4));
        return 0;
}

int main()
{
        test(add);   

        return 0;

}

3.函数指针数组

概念

        本质是数组,数组中存放的是函数指针

格式  

数据类型 (*数组名[元素个数])(参数列表);
数据类型:和指向函数的返回值类型一致
参数列表:和指向的函数的参数列表一致
例如:int (*arr[2])(int,int)={函数名,函数名}

4.共用体

        所有成员变量共用一块地址空间

格式

union   共用体名
{
        成员列表;
};

定义共用体变量

union  共用体名字  变量名;
union  value
{
        int a;
        char b;
};
union value val;
        val.a=10;
        val.b='a';

特性

1)所有成员共用同一块地址空间
2)以最后一次赋值为内存中的实际数据
3)共用体的大小为成员中类型最大的数据的大小

共用体测大小端

union value val;
val.a = 0x12345678;
if(val.b == 0x78)
        printf("小端\n");
else if(val.b == 0x12)
        printf("大端\n");

5.枚举

定义

        一种构造数据类型,用于声明一组常数

格式

enum   枚举类型名
{
        常数1,
        常数2,
};

注意:没有赋初值时默认从0开始,向后依次递增

6.存储类型

(1)auto

        自动型,修饰局部变量,存放在栈区(一般省略)

(2)static

        静态型,可以修饰局部变量和全局变量,也可以修饰函数

注意:        

1.存放在静态区/全局区,.bss(未初始化的全局变量和静态变量)   .data(初始化的全局变量和静态变量)

2.初始值默认为0,只初始化一次

3.限制作用域 ,修饰全局变量被限制仅能在本文件中使用,修饰局部变量,作用域被限制在本函数中,但会延长其生命周期

4.修饰函数,被限制仅能在本文件中使用

(3)extern

        外部引用:可以引用其他文件中的全局变量和函数,在本文件中使用

例如:有file1.c和file2.c两个文件

file1.c

#include
int n=5;
void fun()
{
        printf("hello\n");
}

file2.c
#include
extern int n; //外部引用file1.c中的全局变量n
extern void fun();//外部引用file1.c中的函数fun
int main()
{
        fun();
        printf("n=%d\n",n);
        return 0;
}

(4)register

        寄存器类型,由于寄存器数量较少,申请不到空间时和auto一样

7.条件编译

(1)根据宏是否定义

#define  宏名

#ifdef  宏名
        /*code1*/ 
#else
        /*code2*/ 
#endif

        执行顺序:判断宏是否定义,如果定义了就编译code1,否则编译code2

(2)根据宏值

#define  宏名  值

#if  宏名
        /*code1*/
#else
        /*code2*/
#endif    

        执行顺序:判断宏的值是否为0,如果不为0编译code1,否则编译code2

(3)防止头文件重复包含(放在头文件中)

#ifndef    宏名
#define   宏名
        /*code*/
#endif

相关内容

热门资讯

一起来探讨!微信微乐辅助,we... 一起来探讨!微信微乐辅助,wejoker私人辅助软件,手筋教程(新版有挂)-哔哩哔哩暗藏猫腻,小编详...
辅助透视!wepoker私人局... 辅助透视!wepoker私人局透视插件,微乐家乡麻辣自建房,手筋教程(有挂秘诀)-哔哩哔哩1、wep...
此事迅速冲上热搜!哈糖大菠萝开... 此事迅速冲上热搜!哈糖大菠萝开挂,越乡游辅助脚本,秘籍教程(有人有挂)-哔哩哔哩1)哈糖大菠萝开挂辅...
今日!随意玩聚乐部辅助,广东闲... 今日!随意玩聚乐部辅助,广东闲来辅助,大纲教程(确实有挂)-哔哩哔哩1、任何随意玩聚乐部辅助透视是真...
我来分享!南丰数刀脚本,德州局... 我来分享!南丰数刀脚本,德州局怎么透视,妙招教程(有挂秘诀)-哔哩哔哩小薇(辅助器软件下载)致您一封...
解密透视!拱趴大菠萝挂怎么安装... 解密透视!拱趴大菠萝挂怎么安装,微信小程序微乐内蒙破解器,要领教程(有挂分析)-哔哩哔哩该软件可以轻...
黑科技技巧!约局吧德州有挂吗,... 黑科技技巧!约局吧德州有挂吗,hhpoker有没有作比,积累教程(有挂功能)-哔哩哔哩1、任何约局吧...
有玩家发现!新圣游脚本下载,火... 有玩家发现!新圣游脚本下载,火神工作室辅助大全,操作教程(了解有挂)-哔哩哔哩1、火神工作室辅助大全...
专业讨论!!神兽互娱辅助免费,... 专业讨论!!神兽互娱辅助免费,红龙poker辅助器免费观看,攻略教程(有挂详情)-哔哩哔哩1、全新机...
2026版教程!pokemmo... 2026版教程!pokemmo脚本最新版,微信新九游辅助,资料教程(有挂方略)-哔哩哔哩1、首先打开...