当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS开发系列----C语言(指针及递归函数)

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

2018年02月10日  | 移动技术网移动技术  | 我要评论

指针及递归函数概述

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;

}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网