初始指针

本文详细介绍了指针的概念及其在内存管理中的应用,包括指针的步长、取地址操作符、间接运算符等基本概念,并通过实例展示了如何使用指针进行数值操作。

指针:指针是一个变量

 

指针的步长:整型指针和字符指针的步长不同(原因:保存类型不同):给地址加1,整型运算符加了4个字节,字符运算符加了1个字节。

 

&:取地址

*:间接运算符  取值运算符:取指针变量对饮的空间 保存的地址对应的内存空间的值;

 

指向的内存空间:就是这个指针变量对应的内存空间保存的地址对应的内存空间,我们称之为指向的内存空间。

 

int num = 5;

 

int *p; p = &p;(相当于int* p = &num

   

     5

num                     0x1000         

     

0x1000

 p                0x2000

 

num++num对应的内存空间的值加1

p++:对p对应的内存空间的值加1

*p++:对p指向的内存空间的值加1

 

int **pppp = &p 相当于(int ** pp = &p



0x2000

   pp                    0x3000

 

 远指针:维数比较多的,编译器最多支持32维。

char *ptr = “hello world”

     ptr指向首地址。


在C/C++中,结构体可以包含函数指针作为其成员。这种特性允许将一组相关的操作封装在一个结构体内,常用于实现面向对象编程的某些特性或模块化设计。初始化结构体内的函数指针可以通过多种方式完成,包括直接赋值、使用typedef简化声明以及结合回调函数机制。 ### 初始化结构体内函数指针的基本方法 #### 1. 定义结构体并包含函数指针成员 首先,在定义结构体时,可以直接在其中声明一个函数指针类型的成员变量。例如: ```c struct Operations { int (*add)(int, int); int (*subtract)(int, int); }; ``` 在这个例子中,`Operations` 结构体包含了两个函数指针成员:`add` 和 `subtract`,它们分别指向接受两个整数参数并返回整数结果的函数。 #### 2. 定义具体的函数 接下来需要定义这些函数指针所指向的具体函数。例如: ```c int add(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } ``` #### 3. 初始化结构体实例 有了上述定义后,就可以创建 `Operations` 类型的实例,并为其函数指针成员赋值。这可以通过静态初始化或者动态运行时赋值来完成。 **静态初始化**: ```c struct Operations ops = { .add = add, .subtract = subtract }; ``` **动态初始化**: ```c struct Operations ops; ops.add = add; ops.subtract = subtract; ``` 这两种方法都可以有效地初始化结构体中的函数指针成员[^3]。 ### 使用 typedef 简化函数指针声明 为了提高代码的可读性和减少冗余,可以使用 `typedef` 来为常用的函数指针类型创建别名。例如: ```c typedef int (*MathOperation)(int, int); struct Operations { MathOperation add; MathOperation subtract; }; ``` 这样,`MathOperation` 成为了一个新的类型名称,代表一种特定签名的函数指针。这种方式使得结构体定义更加清晰易懂[^2]。 ### 回调函数与结构体内的函数指针 如果希望结构体内的函数指针能够处理更复杂的逻辑,比如异步操作或事件驱动编程,那么可以考虑采用回调函数模式。通过定义一个接受函数指针作为参数的函数,并且该函数会在适当的时候调用这个函数指针,从而实现非阻塞的操作流程。这种方法通常涉及到更为复杂的程序设计模式,但在很多高级应用中非常有用[^4]。 ### 示例代码 以下是一个完整的示例,演示了如何定义结构体、初始化函数指针成员,并调用相应的函数: ```c #include <stdio.h> // 函数原型声明 int add(int a, int b); int subtract(int a, int b); // 定义结构体 typedef int (*MathOperation)(int, int); struct Operations { MathOperation add; MathOperation subtract; }; // 主函数 int main() { // 创建结构体实例并初始化 struct Operations ops = { .add = add, .subtract = subtract }; // 调用函数指针 printf("Add result: %d\n", ops.add(5, 3)); // 输出 Add result: 8 printf("Subtract result: %d\n", ops.subtract(5, 3)); // 输出 Subtract result: 2 return 0; } // 实现具体函数 int add(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } ``` 此示例展示了从结构体定义到函数指针初始化再到实际调用的全过程。通过这种方式,可以在C语言中灵活地利用函数指针来增强程序的功能和灵活性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值