欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS开发系列----C语言(指针及递归函数)

程序员文章站 2022-07-09 22:58:23
指针及递归函数概述 1.认识指针 【地址】内存每个字节都有一个数字的编号,称为地址。 【指针】指针是一个变量,用来装地址。 【注】指针是地址变量,地址是指针常量 2.指针...

指针及递归函数概述

1.认识指针

【地址】内存每个字节都有一个数字的编号,称为地址。

【指针】指针是一个变量,用来装地址。

【注】指针是地址变量,地址是指针常量

2.指针的作用

①同一个栈内的数据处理,使用指针没有意义;

②指针就是用来访问栈外面的空间;

③指针就是用来跨栈的

3.空指针和野指针

【空指针】值为0的指针(NULL)

【野指针】指针的值未知,或者说指向了未知的地方

【泛型指针】void *p

4.函数的递归调用

调用自身的函数,称为递归函数,调用自身的行为称为递归调用?【注】函数的递归调用只能用于静态的数据运算,如果是动态数据,风险过高,容易崩溃。

方法

①首先确定临界值,即无需计算,获得的值;

②找这一次和上一次的关系;

③假设当前函数已经可以使用,调用自身计算上一次的运行结果,再写出这次的运行结果

指针及递归函数讲解

1.递归函数

//栈空间溢出

int func(int n) {

    if (n == 1) {

    return 1;

}

    return func(n - 1) + n;

}

//任何函数都可以调用任何函数
int main(int argc, const char * argv[]) {

    printf("%d",func(4));

    return 0;

}

2.认识指针

当一个指针p,装了变量a的地址,称为p指向了a。

//取变量的地址,取的是变量的首地址。
int a = 5;
int *p = &a;
*p = a;

【注】p:根据p里面存的地址,找到这个地址,取这个类型的大小,它是一个运算,相当于&a,找到地址为&a的那个字节,取*p个字节,得到一个变量,就是a。举个例子:p就相当于天猫,a是我们,p=&a是填写物流地址的过程,*p就是送货,整个过程为注册—邮寄地址—送货的过程

int main(int argc, const char * argv[]) {

    //声明整型变量a,存储数字5,用相应指针指向a,通过指针,将a修改成6.

    int a = 5;

    int * p;

    //用相应指针指向a

    p = &a;

    //  通过指针,将a修改成6.

    *p = 6;

    printf("a=%d\n",a);

    return 0;

}

2.指针的加法运算:?指针+1,加一个*p的字节数,加一个p指向变量的字节数

int main(int argc, const char * argv[]) {

    char c;

    int a;

    int *p = &a;

    //p+1与p相比增加了4字节

    printf("%p\n",p);

    printf("%p\n",p+1);

    //q+1比q增加了一个字节

    char *q = &c;

    printf("%p\n",q);

    printf("%p\n",q+1);

    return 0;

}

3.指针与数组:数组是指针的常量,指针是数组的变量

int main(int argc, const char * argv[]) {

    int a[5] = {1,3,5,7,10};

    //数组名是数组首元素地址

    int * p = &a[0];

    printf("p = %p\n",p);

    printf("p+1 = %p\n",p+1);

    //取到首元素

    *p = a[0];

    printf("*p = %d\n",*p);

    printf("*(p+1)=%d\n",*(p+1));

    printf("*p+1=%d",*p+1);

    //指针+1,加的是一个*p所指向类型的字节大小

    *(p+1) = a[1];

    //数组名是数组首元素地址

    p = a;

    return 0;

}

小练习
编写函数,将两个整型变量的和,赋给第一个变量,差赋给第二个变量。

参考答案(一万个读者有一万个哈姆雷特,一万个程序员有一万种编码风格,答案仅供参考)
编写函数,将两个整型变量的和,赋给第一个变量,差赋给第二个变量。

void entrust(int * a,int * b) {

    int c = *a;

    *a = *a + *b;

    *b = c - *b;

}

int main(int argc, const char * argv[]) {

    int p = 5;

    int q = 2;

    entrust(&p, &q);

    return 0;

}