C语言知识点(二)

haimian
2024-11-03 / 0 评论 / 8 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年11月03日,已超过168天没有更新,若内容或图片失效,请留言反馈。

今天学习全局变量和局部变量
首先我们看局部变量,实际上我们之前学过的所有变量都是局部变量
我还是在这里距离说明一下什么是局部变量
m30vnfgz.png
介个就是局部变量,局部变量只会在作用域中生效,其他函数中无法生效

接下来就是函数的参数和返回类型
我们的函数是可以接受参数来完成我们想让他完成的任务的,比如我们实现一个功能是为了让实现俩个数相加
代码如下

#include <stdio.h>

void test(int, int);   //函数原型中需要写上需要的参数类型,多个参数用逗号隔开,比如这里我们需要的就是两个int类型的参数

int main() {

}

void test(int a, int b){  //函数具体定义中也要写上,这里的a和b我们称为形式参数(形参),等价于函数中的局部变量,作用域仅限此函数
        printf("%d", a + b);
}

那么很容易可以在命令行里面打印出a + b来,这就是函数的调用的功能

接下来学习一下递归调用,递归也算算法里面的一个内容,这里我先举例说明一下咯

m30wp185.png

可以看出来 sum函数里面不断的调用sum函数,这样让hello world不断的输出的情况 这就是不断的递归

#include <stdio.h>

void test(){
    printf("Hello World!\n");
    test();   //函数自己在调用自己,这样的话下一轮又会进入到这个函数中
}

int main() {
    test();
}

原理的话 我现在不解释,后期的写数据结构的时候去做详细的解释

接下来讲解的是指针,指针本来想单独开一篇的,但是想了想,还是先这样直接写吧

首先我们肯定还记得上面对于俩个数字进行交换的案例
m30x0ee2.png
那么我们发现了函数的外部还是原来的样子,这和局部变量和全局变量也是有关系的,那么问题来了,我们有没有什么办法可以做到函数改变时候,外部也改变一下呢,版本答案就是指针
m30x3l77.png

看到了吧 &是传入 *获取具体的内存下面的数值
指针入门基本就这个样子,具体的话 后期我会单独开一篇文章去详细的介绍指针的,包括指针是怎么分布在内存上面的。

接下来了解指针数组和数组指针

首先我们了解一下什么是数组
数组就是大概这个样子[a,b,c]这个样子,那么我们是否可以通过这个指针来访问数组呢?

#include <stdio.h>

int main(){
    int a, b, c;
    int * arr[3] = {&a, &b, &c};

    *arr[0] = 999;   //[]运算符的优先级更高,所以这里先通过[0]取出地址,然后再使用*将值赋值到对应的地址上
    printf("%d", a);
}
#include <stdio.h>

int main(){
    int arr[3] = {111, 222, 333};
    int (*p)[3] = &arr;  //直接对整个数组再取一次地址

    printf("%d, %d, %d", *(*p+0), *(*p+1), *(*p+2));   //要获取数组中的每个元素,稍微有点麻烦
}

接下来是函数指针和指针函数
先看指针函数

#include <stdio.h>

int * test(int * a){   //函数的返回值类型是int *指针类型的
    return a;
}

int main(){
    int a = 10;
    int * p = test(&a);   //使用指针去接受函数的返回值
    printf("%d\n", *p);
      printf("%d", *test(&a));   //当然也可以直接把间接运算符在函数调用前面表示直接对返回的地址取地址上的值
}

以上就是第二章咯

0

评论 (0)

取消