其他分享
首页 > 其他分享> > Pointers On C [Kenneth A.Reek] 读书笔记

Pointers On C [Kenneth A.Reek] 读书笔记

作者:互联网

代码地址

3.数据

enum tech {LINUX,OS,DB,K8S,GOLANG=99};
typedef char *ptr_to_char;
ptr_to_char a, b, c; // 相当于 char *a,*b,*c;

6.指针

#define N_VALUES 5
float values[N_VALUES];
float *vp;

for(vp=&values[0];vp<&values[N_VALUES];)
    *vp++ = 0;

for(vp=&values[N_VALUES];vp>&values[0];)
    *--vp = 0;

// 下面的不合法,比较vp>=&values[0]的值是未定义的,因为vp移动到了数组的边界之外。但是大多数编译器都能让它工作
for(vp=&values[N_VALUES-1];vp>=&values[0];vp--)
    *vp = 0;

7.函数

#include <stdarg.h>
#include <stdio.h>
float average(int n_values,...);

// 可变参数
int main(void){
    printf("%f\n",average(5,1,2,3,4,5));
    printf("%f\n",average(7,1,2,3,4,5,6,7));
    return 0;
}

float average(int n_values,...){
    va_list args; // 用于访问参数列表未确定部分
    int count;
    float sum = 0;

    va_start(args,n_values); // 准备访问可变参数

    for(count=0;count<n_values;count+=1){
        sum += va_arg(args,int); // 依次取可变参数的值,n_values表示可变参数的个数
    }

    va_end(args); // 完成可变参数处理
    return sum/n_values;
}

10.结构与联合

11.动态内存分配

void *malloc(size_t size);
void free(void *pointer);
void *calloc(size_t num_elements,size_t element_size);
void *realloc(void *ptr,size_t new_size);

13.高级指针

#include <stdio.h>

double add(double, double);
double sub(double, double);
double mul(double, double);
double div(double, double);
double (*oper_func[])(double, double) = {add, sub, mul, div};

int main(void)
{
    printf("%lf\n", oper_func[0](1, 2));
    printf("%lf\n", oper_func[1](1, 2));
    printf("%lf\n", oper_func[2](1, 2));
    printf("%lf\n", oper_func[3](1, 2));
}

double add(double a, double b) { return a + b; }
double sub(double a, double b) { return a - b; }
double mul(double a, double b) { return a * b; }
double div(double a, double b) { return a / b; }

14.预处理器

15.输入/输出函数

18.运行时环境

标签:函数,指向,读书笔记,double,Pointers,内存,结构,Reek,指针
来源: https://blog.csdn.net/qq_31220203/article/details/120907778