美文网首页
C语言-2、数组、函数

C语言-2、数组、函数

作者: 喂_balabala | 来源:发表于2022-07-12 19:26 被阅读0次
数组定义
// 定义数组
// int [] arr = {1,2,3,4}; 错误的写法
int arr[]  = {1,2,3,4};

// 遍历数组
// 其他平台不能用 Clion能用, Linux上报错
/*for (int i = 0; i < 4; ++i) {

}*/

// VS非常严格,规范,    CLion包容

// Linux上没有问题,Clion没有问题,Mac没有问题
int i = 0;
for (i = 0; i < 4; ++i) {
    printf("%d\n", arr[i]); // 取值
}
数组的指针、内存地址、取值
// 数组 和 指针 挂钩
// 数组的内存地址 == 第一个元素的内存地址  == &arr
// 数组的内存地址 == 第一个元素,不是第二个元素,也不是第n个元素
printf("arr  =   %d\n", arr);
printf("&arr  =   %d\n", &arr);
printf("&arr[0]  =   %d\n", &arr[0]);

// 既然数组就是一个内存地址
int * arr_p = arr;

printf("%d\n", *arr_p); // *arr_p 取出元素一内存地址的值 1

arr_p ++; // 指针挪动   元素二的内存地址了

printf("%d\n", *arr_p); // *arr_p 取出元素二内存地址的值 2

arr_p += 2;

printf("%d\n", *arr_p); // 输出4

// 输出1

arr_p -= 3; // 挪动指针指向到 元素一

printf("%d\n", *arr_p);

arr_p += 2000;

printf("%d\n", *arr_p); // 系统值 572662306

 // 数组是连续的内存空间(没有断层,有规律) 数组  每次挪动 4个字节 == int数组 (挪动数组元素类型对应的字节数)
数组大小
sizeof arr == sizeof(arr)
函数指针
void add(int num1, int num2); // 先声明

void mins(int num1, int num2) {
    printf("num1 - num2 = %d\n", (num1 - num2));
}

// 操作 回调到  add  mins
// void(*method)(int,int)  声明好 函数指针
// void 返回值
// (*method) 函数名
// (int,int) 两个参数
void opreate(void(*method)(int,int), int num1, int num2) {
    method(num1, num2);

    printf("opreate函数的 method指针是多少:%p\n", method);
}

// 7.函数指针。(回调)  Java接口的回调
int mainT8() {  // 【第一种写法】

    opreate(add,  10, 10);
    opreate(mins,  100, 10);

    // 原理是什么?

    printf("main函数的 add指针是多少:%p\n", add);
    printf("main函数的 mins指针是多少:%p\n", mins);

    // &add和add是一样的值吗
    printf("%p, %p\n", add, &add); //  004018CE, 004018CE  一样的

    return 0;
}

// 再实现 使用
void add(int num1, int num2) {
    printf("num1 + num2 = %d\n", (num1 + num2));
}
函数指针2

void callBackMethod(char * fileName, int current, int total) {
    printf("%s图片压缩的进度是:%d/%d\n", fileName, current, total);
}

// 压缩的方法
// 定义函数指针: 返回值(*名称)(int,double)
void compress(char * fileName, void(*callBackP)(char *,int,int)) {
    callBackP(fileName, 5, 100); // 回调给外交 压缩的进度情况
}

// 函数指针2
int main9() {

    // 1 如果有问题
    // VS  Clion 通过了,  Linux 可能不通过(因为这样不合规范)
    // void (* call) (char *, int ,int) = callBackMethod;

    // 有种temp的思路一样的感觉
    //  2 再换成这种方式 【第二种写法】
    // Linux  先定义, 再赋值
    void (* call) (char *, int ,int);
    call = &callBackMethod;

    void (* call2) (char *, int ,int);
    void (* call3) (char *, int ,int);
    void (* call4) (char *, int ,int);
    void (* call5) (char *, int ,int);
    call5 = &callBackMethod; // &callBackMethod 1000H  == callBackMethod 1000H

    compress("derry.png", call5);

    // 常量指针  指针常量   【函数指针】

    // 字符串  操作符重载 + C函数
    // char * c = "Derry" + "A";
}

函数指针3
void add(int i,int j) {
    printf("i+j=%d\n", i+j);
}

void add2(int i,int j) {
    printf("2 i+j=%d\n", i+j);
}

// 函数 函数指针声明来接收函数
void test(void(*p)(int, int)) {
    p(9, 9); // 省略*

    (*p)(9, 9);
    (p)(9, 9); // 省略*

    // (&p)(9, 9); 在源码没有看到这种写法

    // 思考:p 为什么也可以不用写 *   函数的上面已经声明就是 函数指针,所以可以省略*

}

int mainT1() {
    test(add);
    test(add2);
    return 0;
}

相关文章

  • C语言-2、数组、函数

    数组定义 数组的指针、内存地址、取值 数组大小 函数指针 函数指针2 函数指针3

  • 2018-08-29日常C笔记

    C语言初学笔记 C语言程序是由函数组成的C语言程序启动时,系统就会自动调用名字叫main的函数C语言规定了函数定义...

  • 2020-11-17--02--windows 数据类型

    windows系统是c语言开发的 字符数组,是c语言,重新定义的 Lstrlen-------C语言函数=====...

  • C语言之函数与预编译= =

    函数定义 C语言程序框架C语言程序的框架有两种: 注意:1.一个源程序文件可由一个或多个函数组成之函数2.一个C语...

  • 01-Go语言与C语言的异同

    Go语言程序组成 和C语言一样,Goa语言也是由众多函数组成 和C语言一样,程序运行会自动调用叫做main的函数 ...

  • 5-C中的函数

    可以说C程序的全部工作都是由各式各样的函数完成的,所以也把C语言称为函数式语言.C源程序是由函数组成的。 函数分类...

  • Sizeof on array function paramet

    在C语言中,数组作为函数参数时将退化为指针。

  • C语言练习题: 函数部分

    C语言练习题:函数部分(9题) 上一篇: C语言练习题:循环部分 下一篇: C语言练习题:数组部分 斐波那契,函数...

  • 【C语言笔记】<五>函数

    C语言程序是有函数组成的.函数是C语言的基本模块,通过对函数模块的的调用来实现特定的功能 什么是函数 函数就是一段...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

网友评论

      本文标题:C语言-2、数组、函数

      本文链接:https://www.haomeiwen.com/subject/zuvabrtx.html