函数、作用域、指针

来源:互联网 发布:js除以一个数取整 编辑:程序博客网 时间:2024/05/18 03:18

1、函数(续)

实参与形参    值传递:实参赋值给形参之后,形参在函数体内发生的变化,不会传回给实参    个数的对应关系    类型转换
        int result = power(10);        NSLog(@"%d", result);        int a = 10;        plus(a);        NSLog(@"in main a=%d", a);        fa(1,2,3,4,5);//当无形参时,实参会被忽略掉        //fb(1,2,3);//形参指定为void后,调用时不能有实参        //add(10, 20, 30);//当有形参时,实参不能多        //add(10);//也不能少        result = add(3.14, 2.68);//当形参与实参的数据类型不一致时,以形参为准,进行转换        NSLog(@"%d", result);
return:结束所在函数,赋值与跳转,return语句只能返回一个值,不能反回两个或两个以上的值exit:结束整个程序
    switch (x) {        case 1:            NSLog(@"x==1");            return;//结束所在函数的运行        case 2:            NSLog(@"x==2");            break;//结束所在switch语句的运行        case 3:            NSLog(@"x==3");            break;        case 4:            exit(0);//结束整个程序的运行    }
递归:是一种特殊的函数调用方法,自己调用自己
#import <Foundation/Foundation.h>long power(int x, int n){    if (n == 1)    {        return x;    }    return x * power(x, n - 1);}int main(){    @autoreleasepool {        NSLog(@"5^3=%ld", power(5, 3));    }    return 0;}

2、作用域

变量其作用的范围
局部变量:定义在函数体内,或复合语句内的变量

#import <Foundation/Foundation.h>void fa(int x)//形参x是一个局部变量{    x++;    NSLog(@"in fa x=%d", x);    //y = 100;//局部变量y的作用域是从定义行开始到函数体结束    int y = 20;//定义在函数体内的变量也是局部变量    if (y)    {        int a = 30;//定义在复合语句中的变量,也是局部变量,该变量仅在复合语句中起作用        a += y;    }    //NSLog(@"%d", a);    for (int i = 0; i < 10; i++)    {        printf("%d ", i);    }    printf("\n");    //printf("%d\n", i);//循环变量i是循环体内的局部变量    {        int b = 50;        b++;        int a[100];//局部数组        a[0] = 12345;    }    //b++;    //a[0] = 54321;}int main(){    @autoreleasepool {        int x = 10;        fa(x);        NSLog(@"in main x=%d", x);    }    return 0;}
全局变量:定义在函数体外的变量,尽量不要使用全局变量
#import <Foundation/Foundation.h>int g1 = 10;//g1是一个全局变量void fa(){    g1++;    //g2++;//全局变量的作用域是从定义行开始计算的,到整个文件结束}int g2;//一个全局变量不初始化时,编译器将给它赋值为0//全局变量与局部变量的关系int abc = 100;void fc(){    NSLog(@"%d", abc);    int abc = 200;//当局部变量与全局变量同名时,全局变量不起作用    NSLog(@"%d", abc);    {        int abc = 300;//程序只使用其所在作用域内定义的局部变量        NSLog(@"%d", abc);    }    NSLog(@"%d", abc);}int main(){    @autoreleasepool {        g1++;        fa();        NSLog(@"%d", g1);        NSLog(@"%d", g2);        fc();    }    return 0;}

3、生命周期

从变量分配存储空间到存储空间被释放空间的时间
auto关键字(默认)
static关键字
延长局部变量的生命周期,到整个程序结束
static不会修改局部变量的作用域

#import <Foundation/Foundation.h>void fa(){    int n = 1;    NSLog(@"%d", n);    n++;}void fb(){    static int n = 1;    NSLog(@"%d", n);    n++;}int main(){    @autoreleasepool {        for (int i = 0; i < 5; i++)        {            //n = 10;            fb();        }    }    return 0;}

4、指针

指针就是地址,地址就是自己在内存中的编号指针变量:专门存储地址的变量,简称为指针指向:指针变量p中保存另一个变量x的地址时,就说该指针变量指向该变量x引用:使用指针操作(赋值、访问)其指向的变量

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
解析:

#import <Foundation/Foundation.h>int main(){    @autoreleasepool {        int x = 100;        int* px = &x;        NSLog(@"%p", px);        *px = 200;//指针px引用(赋值)变量x        NSLog(@"%d", x);        NSLog(@"%d", *px + 10);//引用(访问)        char ch = 'a';        char* pch = &ch;        *pch = 'b';        NSLog(@"%c", ch);        float f = 3.14;        float* pf = &f;        *pf = 2.68;        NSLog(@"%g", f);        double d = 9.8;        double *pd = &d;        *pd = 4.5;        NSLog(@"%lg", d);        //下面两行等效        int* p1;        int *p2;        int a1 = 10;        p2 = &a1;        int a2 = 20;        p2 = &a2;//当对指针进行赋值时,相当于指针指向的改变        *p2 = 30;//改变指针引用的空间        NSLog(@"a1=%d,a2=%d", a1, a2);    }    return 0;}

每日一练
1、打印如下图形
01
2、用函数简化打印程序

#import <Foundation/Foundation.h>void printSpace(int num){    for (int j = 0; j < num; j++)    {        printf(" ");    }}void printStar(int num){    for (int j = 0; j < num; j++)    {        printf("*");    }}void printPic(int lineNum){    for (int i = 0; i < lineNum; i++)    {        printSpace(lineNum - i - 1);        printStar(2 * i + 1);        printf("\n");    }}void printPic1(int lineNum){    for (int i = 0; i < lineNum - 1; i++)    {        printSpace(lineNum - i - 1);        printStar(1);        if (i > 0)        {            printSpace(2 * i - 1);            printStar(1);        }        printf("\n");    }}int main(){    @autoreleasepool {        int n;        NSLog(@"请输入行数:");        scanf("%d", &n);        printPic1(n);    }    return 0;}
0 0
原创粉丝点击