C语言高级进阶5

  • day5
    • 一、指针函数
      • 1.概念
        • 本质是函数,函数的返回值是指针。
      • 2.定义格式
        • 数据类型 *函数名(参数列表) {  函数体;  return 地址; //当失败时一般返回NULL }
      • 3.函数内开辟堆区空间
        • 案例一:
            • 结果未知,因为返回局部变量地址,函数调用结束后没有权限使用栈区的空间了所以结果是不可控的。如果被其他进程占用,可能会报段错误或者打印奇怪的东西。
          • 修改:可以返回堆区空间的地址
        • 案例二:
            • 报段错误:因为q指向NULL, 函数内改变形参p的指向不会影响到q,函数调用结束q还是指向NULL。
          • 修改:传递二级指针
        • 案例三: 数组传递
            • 传递数组形式是为了让用户知道要传递的是一个数组,但本质还是传递数组首地址也就是本质是指针。
    • 二、函数指针
      • 1.概念
        • 本质是指针,指向了函数。
      • 2.定义格式
        • 数据类型 (*指针名)(参数列表);
      • 3.案例
        • 3.1函数名: 函数地址
        • 3.2把函数指针当成参数传递给函数。一种接口, 多种方法。
        • 3.3结构体内成员是函数指针(不常用但是看内核原码可能会见到)
    • 三、函数指针数组
      • 1.概念
        • 本质是数组,数组中元素是函数指针。
      • 2.格式
        • 数据类型 (*数组名[元素个数])(形参列表);
        • 数据类型: 和数组中函数指针指向的函数的返回值一致
        • 形参列表: 和数组中函数指针指向的函数的形参一致
      • 3.赋值
        • int (*arr[3])(int,int)={函数名列表};
      • 4.练习
        • (a) 一个整型数   int a;
        • (b) 一个指向整型的指针  int *p;
        • (c)一个指向指针的指针,它指向的指针是一个指向一个整型       int **p;
        • (d)一个有10个整型数的数组  int a[10];
        • (e)一个有10个指针的数组,该指针是指向一个整型数的  int *arr[10];
        • (f)一个指向有10个整型数数组的指针 int a[10]; int (*p)[10]=&a;//相当于升级,可以把列地址升级成行地址。或者: int arr[1][10]; int (*p)[10]=arr;
        • (g)一个指向函数的指针, 该函数有一个整型参数并返回一个整型数  int (*p)(int);
        • (h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数  int (*p[10])(int);
    • 四、条件编译
      • 1.概念
        • 按照条件是否满足决定代码是否被编译,是预处理指令。 简单来说就是 后面的条件语句(condition)如果执行结果不为0,则该#if语句块内的代码会被编译,否则就不会被编译。
      • 2.根据宏是否定义
        • #define 宏名
        • #ifdef 宏名  代码块1
        • #else  代码块2
        • #endif
        • 执行顺序: 宏名如果链接定义则编译代码块1,否则编译代码块2。
      • 3.根据宏值
        • #define 宏 值
        • #if 宏名  代码块1
        • #else  代码块2
        • #endif
        • 执行顺序:宏的值为非0也就是真则编译代码块1,否则编译代码块2。
      • 4.防止头文件重复包含
        • 放在头文件中:
        • #ifndef 宏名
        • #define 宏名  头文件中语句
        • #endif
        • 例子:
            • 报错是因为结构体stu重复定义,因为包含结构体定义的head.h被多次引用。
          • 修改:加上防止头文集重复包含。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值