//  main.m

//  1-23随堂笔记

//讲师: 小辉

//笔者: 王学文

//  Created by lanouhn on 15/1/23.

//  Copyright (c) 2015年 lanouhn. All rights reserved.

//pointer(指针高级)

 

#import <Foundation/Foundation.h>

#import "Function.h"

 

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

    /*

    //整型数组

    int array[5] = {1, 2, 3, 4, 5};

    

    

    //指针变量

    int *p = NULL;

    

    //指针数组中每个元素的值(地址)对应的内容

    int a = 1;

    int b = 2;

    int c = 3;

    int *arr[3] = {&a, &b, &c}; //8 * 3个字节

    

    printf("%lu\n", sizeof(arr));

    

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

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

    

    //arr            0x1000

    //arr + 1      0x1000

    //arr + 2      0x1000

    

    // *arr            0x200

    // *(arr + 1)    0x300

    

    // *(*arr)                1

    // *(*(arr + 1))        2

    for (int i = 0 ; i < 3; i++) {

        printf("%p ", arr + i);

        printf("%p ", *(arr + i));

        printf("%d\n", *(*(arr + i)));

    }

    

    //指针在函数中的使用

    

    int i = 10;

    int k = 20;

    swap(i, k); //交换的是形参,实参没有发生变化

    printf("i = %d, k = %d\n", i, k);

    

    //传递指针, 可以改变i和k的值

    swapPro(&i, &k);

    printf("i = %d, k = %d\n", i, k);

    

    //求两个数的最大值

    int a = 1;

    int b = 2;

    int max = 0;

    max = maxnum(&a, &b);

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

    

    max = maxValue1(a, b);

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

    

    maxValue(a, b, &max);

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

    

    

    int array[5] = {1, 2, 3, 4, 5};

    

    for (int i = 0; i < sizeof(array) / sizeof(int ); i++) {

        printf("%d\n", array[i]);

    }

    

    //随机给数组的每个元素赋值

    int arr1[5] = {0};

    arr(arr1, 5, 100, 50);

    for (int i = 0; i < 5; i++) {

        printf("%d ", arr1[i]);

    }printf("\n");

    

    */

    //结构体

    struct student {

        char name[50];

        char gender;

        int age;

    };

    typedef struct student Student;

    

    //结构体变量

    Student stu = {"wangmazi", 'M', 20};

    printf("%s\n", stu.name);

    printf("%c\n", stu.gender);

    printf("%d\n", stu.age);

    

    

    //结构体指针

    Student *p = NULL;

    //指向了结构体第一个成员变量的首地址

    p = &stu;

    

    printf("%s\n", (*p).name);

    printf("%c\n", (*p).gender);

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

    

    //指向操作符: ->

    //用来访问结构体的成员变量

    printf("%s\n", p ->name);

    printf("%c\n", p ->gender);

    printf("%d\n", p ->age);

    

    

    

    

    cpoint m = {3.0, 4.0};

    cpoint n = {6.0, 8.0};

    cpoint *p1 = &m;

    cpoint *p2 = &n;

    

    //sqrt : 开方函数

    //powf : 幂函数

    

    float distance = ((p1->x) - (p2 ->x)) * ((p1->x) - (p2 ->x)) + ((p1 ->y) - (p2 ->y)) * ((p1 ->y) - (p2 ->y));

    float distance1 = sqrtf(distance);

    printf("%.2f\n", distance1);

    //5 = sqrt(powf(3, 2) + powf(4, 2));

    

    distance = distanceWithTwoPoint(&m, &n);

    printf("%.3f\n", distance);

    

    Student stu1 = {"smd sfag dsfasfs sfs afsa", '?', 123};

    //去除name中的' '字符;

//    Student *p6 = &stu1;

//    int i = 0;

//    while(p6 ->name[i]) != '\0') {

//        if (p6 ->name[i]) == ' ') {

//            p6 ->name[i] = '_'

//        }

//        i++;

//    }

//    printf("%s", p6 ->name);

//    

    

    

    

    

    

    //变为Lan_ou

    stu1.name[0] = 'L';

    stu1.name[3] = '_';

    printf("%s\n", stu1.name);

    

    

//    p3 -> name[0] = 'L';

//    p3 -> name[3] = '_';

    printf("%s\n", stu1.name);

    

    //把'?'改为'F', 把年龄改为18;

    Student *p4 = &stu1;

    p4 -> gender = 'F';

    p4 -> age = 18;

    printf("性别:%c, 年龄%d\n", p4 -> gender, p4 -> age);

    

    //去除空格

//    char string[] = "smd sfag dsfasfs sfs afsa";

//    //int i = 0;

//    while (string[i] != '\0') {

//        //printf("%c", string[i]);

//        if (string[i] == ' ') {

//            string[i] = '_';

//        }else

//        i++;

//    

//    }

  

//        printf("%s\n", string);

 

    

   // int a[3] = {1, 2, 3};

    Student students[3] = {

        {"zhangsan", 'f', 18},

        {"lisi", 'm', 20},

        {"wanger", '?', 25}

    };

    //遍历数组中的中的每个元素,并输出姓名

//    students[0].name[0] = 'Z';

//    students[1].name[0] = 'L';

//    students[2].name[0] = 'W';

//    for (int i = 0; i < 3; i++) {

//        students[i].name[0] = students[i].name[0] - 32;

//    }

//    for (int i = 0; i < 3; i++) {

//        printf("%s\n", students[i].name);

//    }

//    for (int i = 0; i < 3; i++) {

//        students[i].age += 10;

//        if (students[i].age > 30) {

//            students[i].age = 30;

//        }

//    }

//    for (int i = 0; i < 3; i++) {

//        printf("%d\n", students[i].age);

//    }

    

    

    Student *p7 = students;

//    (*p7).name;

//    (*(p7 + 1)).name;

//    (*(p7 + 2)).name;

    for (int i = 0; i < 3; i++) {

        (p7 + i) ->name[0] -= 32;

    }

    for (int i = 0; i < 3; i++) {

        printf("%s\n", (p7 + i) ->name);

    }

    for (int i = 0; i < 3; i++) {

        (p7 + i) ->age += 10;

        if ((p7 + i) ->age > 30) {

            (p7 + i) ->age = 30;

        }

    }

    for (int i = 0; i < 3; i++) {

        printf("%d\n", (p7 + i) ->age);

    }

    

    char string[] = "IOS";

    

    char *p8 = NULL;

    

    //指针指向了字符串的首地址

    p8 = "asd";

    

    //array[i] = *(array + i)

    

    char str1[] = "abc";

    char str2[] = "123";

    char str3[] = "bpf";

    //字符指针数组

    char *array[3] = {str1, str2, str3};

//    array[0][1]

//    *(array[0] + 1)

//    *(*array + 1)

    

    

    char *strings[3] = {"abc", "123", "bpf"};

    

    //字符转数组

    char strs[3][100] = {"abc", "123", "bpf"};

    

//    strs[0][1]

//    *(*strs + 1)

      return 0;

}

 

posted on 2015-01-23 21:51  小雪童鞋  阅读(209)  评论(0编辑  收藏  举报