高级指针的应用

来源:互联网 发布:怎么下载word2010软件 编辑:程序博客网 时间:2024/05/27 02:32

#import <Foundation/Foundation.h>

#import "Function.h"

//void printTwoArray(int (*array)[3],int row);

//void printTwoArray(int (*array)[3],int row){

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

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

//            printf("%d\t",*(*(array + i) + j));

//        }

//        printf("\n");

//    }

//}

//    数组使用指针的形式当做函数参数

//    以下两种写法完全等价,实质上都是传入的数组的首地址

//void printArray(int *array[],int count){

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

//        printf("%d\t",*(array + i));

//        }

//    }

//int changeString(char *str){

//    int i = 0;

//    int count = 0;

//    while (*(str + i) != '\0') {

//        if (*(str + i) == 'a') {

//            count ++;

//            *(str + i) = 'A';

//        }

//        i ++;

//    }

//    printf("%da\n",count);

//    return count;

//}

//typedef struct Student{

//    char name[20];

//    char sex;

//    int age;

//    float score;

//}STUDENT;

////结构体类型的数组当做函数参数

//void changeStudentAge(STUDENT *stus){

//    stus -> age = 18;

//}

//

//void checkStudentsAge(STUDENT *stus , int count){

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

//        if ((*(stus + i)) . age <  18) {

//            changeStudentAge(stus + i);

//    }

//        printf("%s,%d\n",(stus+ i)->name,(stus + i)->age);

//    }

//}

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

    ///利用指针变相的实现一次函数调用拿到多个结果

    //先准备好两个存放最大值和最小值的变量

    //把两个变量的地址传过去,函数里面通过地址给两个变量赋值

    // void swap(int * a, int *b);

    //STUDENT stu = {"zhangsan", 'M', 25, 86.7};//在栈区存储

    //定义一个结构体类型的指针指向一个结构体变量的首地址

    //*p取出的是整个结构体变量,使用.访问成员

    //printf("%lu", sizeof(stu));

    //    STUDENT * p = &stu;

    //    //(*p).sex = 'f';

    //    //strcpy((*p).name, "lisi");//数组名是常量地址,不能进行修改重新赋值,要用strcpy(),进行修改

    //使用指向结构体变量的指针加上->(指向)操作符,访问结构体的成员

    //    strcpy(p->name, "lisi");

    //    p->age = 23;

    //    p->sex = 'F';

    //    printf("%s, %c, %d, %f", p->name, p->sex, p->age, p->score);

    //    printf("%s, %c, %d, %f", (*p).name, (*p).sex, (*p).age, (*p).score);

    //   STUDENT stu = {"zhangsan", 'M', 25, 86.7};

    //    STUDENT * p = &stu;

    ////p->name得到的是一个指针,可以直接重新指向

    //    p->name = "lisi";

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

    ////    STUDENT stu1 = stu;

    //    STUDENT * p = &stu;

    //    STUDENT * p1 = &stu1;

    //    strcpy(p->name, "lisi");

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

    //    char name[20] = "zhangsan";

    //    STUDENT stu = {name, 'M', 25, 86.7};

    //    STUDENT stu1 = stu;

    //    STUDENT * p = &stu;

    //    STUDENT * p1 = &stu1;

    //    strcpy(name, "lisi");

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

    

    //    STUDENT stus[3] = {

    //        {"zhangsan", 'M', 25, 98.2},

    //        {"lisi", 'F', 21, 85.7},

    //        {"wangwu", 'M', 18, 93.6},

    //    };

    //    STUDENT * p = stus;//数组名本身就是地址

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

    ////   printf("%s\n", (*(p + 1)).name);//加的是32个字节

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

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

    ////使用结构体指针把数组中学生成绩大于90的姓名后面拼上(A)

    //    for(int i = 0; i < sizeof(stus) / sizeof(STUDENT); i++){//总的除以单个得到的是就是数组元素的个数

    //        if((p + i)->score >= 90){

    //            strcat((p + i)->name, "(A)");//strcat()字符串拼接函数,不是字符拼接函数,如果要拼接A,应该拼接为"A"

    //        }

    //    }

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

    //        printf("%s %.2f\n", (*(p + i)).name, (*(p + i)).score);

    //    }

    

    //    int x = 10, y = 15;

    //    swap(&x, &y);

    //    printf("x = %d y = %d", x , y);

    

    

    //    int a = 2;

    //    int b = 3;

    //    int c = 4;

    //    return max;

    //    //int result = max(2, 3, 4);

    //    printf("max = %d", result);

    //    int max = 0;

    //    int min = 0;

    //    maxValue(10, 15, 12, &max, &min);

    //    printf("max = %d, min = %d", max, min);

    

    

//    计算字符串中所有的小写字母a的个数,并把小写a改成大写A

//    char string[] = "afhdjkahhfahjkaghakjhkjhgahahag";

//    changeString(string);

//    printf("改变字母之后的数组为%s",string);

//    

//    

//    STUDENT stus[3] = {

//        {"zhangsan", 'M', 16, 98.2},

//        {"lisi", 'F', 21, 85.7},

//        {"wangwu", 'M', 18, 93.6},

//    };

//    checkStudentsAge(stus , 3);

//    changeStudentAge(stus);

//整形的指针数组

//    数组里面每个元素都是地址,数组总共占24个字节内存。每个指针占用8个内存空间

//    int a = 5;int b = 6;int c = 3;

//    int *p[3] = {&a,&b,&c};

//    printf("%d\n",*(*(p + 1)));//*p+i)取出的为地址

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

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

//    }

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

//        printf("%d ",*(*(p+i)));

//    }

    

//    char strings[3][10]  = {"iphone","Android","winPhone"};//在栈区开辟一个30个字符的内存空间

//    strings[0] = "Apple";错误

//    strcpy(strings[0], "apple");

    

    

//    char * strings[3] = {"iphone","Android","winPhone"};//字符型指针数组,存储3个常量区字符串的地址。

////    可以直接重指向

//    strings[0] = "Apple";

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

//        printf("%s ",*(strings+i));

//    }

    

    

//    int a = 5;

//    int *p = &a;

//    int ** p1 = &p;//指向指针的指针

//    printf("%d",*(*p1));

    

//    int array[2][3] = {{1,6,8},{2,7,5}};

//    int (*p)[3] = array;//指向由三个元素组成的一维数组的指针

//    printf("%d",*(*(p + 1) + 1));//*(p + 1)取出的是大数组中的下标为1的一个一维数组中的首地址,即为2**p + 1+1)取出的是下标为1的一维数组中的首地址向后移动4个字节之后的地址,即为7

//    二维数组的第二维度必须要写

    

// 定义一个指向二维数组的指针   

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

//    printTwoArray(array,2);


 return 0;

}


0 0
原创粉丝点击