C语言第九讲(PointerPro)

来源:互联网 发布:七彩虹淘宝旗舰店 编辑:程序博客网 时间:2024/05/16 11:44

//

//  main.m

//  LessonPointerPro

//

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

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

//

#import

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

 //结构体

//    

//    struct student {

//        char name[20];

//        char gender;

//        int age;

//    };

//    

//   //结构体重命名

// typedef struct student Student;

////    

//

//    //结构体变量

//    Student stu={"hanmeimei",'f',18};

//    

//    

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

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

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

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

//    

//    //结构体指针变量

//    

//    Student *p  =NULL;

//    //指针指向了结构体变量的首地址,相当于指向了结构体第一个成员变量的首地址

//    

//    p=&stu;

//    

//    

//    //注:*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,包含两个float 成员x,y

//    struct cPoint{

//        float x;

//        float y;

//    

//    };

//   

//    typedef struct  cPoint CPoint;

//  //定义两个CPOint结构体变量m,n

//    

//    CPoint m={10,10};

//    CPoint n={7,6};

//    

//   //使用两个结构体指针分别指向m,n

//    CPoint *p1=&m;

//    CPoint *p2=&n;

//    

//    //然后通过指针计算两点距离(提示:1.勾股定理.2.开方函数sqrt)

//    //1.

////    float x1=1.0;

////    float x2=1.;

////    float x3=1.f;

////    float x4=1.0f;

////    float x5=1;

////  1.

//    //float length=(m.x-n.x)*(m.x-n.x)+(m.y-n.y)*(m.y-n.y);

//    //length=sqrtf(length);

//    //printf("%.2f",length);

//   //2.

////    float length=powf((p1->x-p2->x), 2)+powf((p1->y-p2->y), 2);

////    length=sqrtf(length);

////    printf("%.2f",length);

//    

//    

//    // 把下面结构体变量的姓名的首字母大写,并且把空格改成下划线

//    Student stu1={"zhang san feng",'m',18};

//    //1.

////strcpy(stu1.name,"Zhang_san_feng");

//    //huozhe

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

////    stu.name[5]='_';

//    //2.

////    if (stu1.name[0]>='a'&&stu1.name[0]<='z') {

////        stu1.name[0]-=32;

////    }

////    printf("%c\n",stu1.name[i]);

////    int i=0;

////    while (stu1.name[i]!='\0') {

////        if (stu1.name[i]==' ') {

////            stu1.name[i]='_';

////        }

////        i++;

////    }

//    //3.

////    Student *p3=&stu1;

////    if (p3->name[0]>='a'&&p3->name[0]<='z') {

////        p3->name[0]-=32;

////    }

////    printf("%c\n",p3->name[0]);

////    int i=0;

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

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

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

////    }

////    i++;

////    }

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

////4.

//    char *p3=stu1.name;

//    printf("%c\n",*p3);

//

////    if (p3[0]>='a'&&p3[0]<='z') {

////        p3[0]-=32;

////    }

////    printf("%c\n",p3[0]);

////    int i=0;

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

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

////            p3[i]='_';

////        }

////        i++;

////    }

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

    //结构体数组和指针的关系

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

//    int *p=a;

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

    

//    Student s[5] = {

//        {"ahuang",'f',5},

//        {"xiyangyang",'f',10},

//        {"huluwa",'m',2},

//        {"tianxianbaobao",'m',7},

//        {"guixianren",'m',100}

//    };

//    

//    Student *q = s;

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

//    

   //%o,   八进制

    //%x, 十六进制

    //printf("%x\n",56);//38

///  *s:第一个结构体变量  s[0]

    //*(s+1):第二个结构体变量s[1]

    //...

    //*(s+i):第i+1个结构体变量s[i]

    

    //s[0].name

    //(*s).name        s[0].name

    //(*(s+1)).name    s[1].name

    //...               ...

    //(*(s+i)).name    s[i].name

    //s:第一个元素的首地址(数组的首地址)

    //s+1:第二个元素的首地址

    //...

    //s+i:第i+1个元素的首地址

    //注:元素就是结构体变量

    

    //一旦有了指向结构体变量首地址的指针,可以使用->(指向操作符)访问结构体变量的成员变量

    //s->name        s[0].name

    //(s+1)->name    s[1].name

    //...             ...

    //(s+i)->name    s[i].name

    

    //打印结构体数组的每个元素

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

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

//    }

//    

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

//        printf("%s %c %d \n",(*(s+i)).name,(*(s+i)).gender,(*(s+i)).age);

//    }

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

//        printf("%s %c %d \n",s[i].name,s[i].gender,s[i].age);

//    

//    }

    //    结构体数组中的姓名首字母大写,并且年龄增加10

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

//        if (s[i].name[0]>='a'&&s[i].name[0]<='z') {

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

//        }

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

//         printf("%s %c %d\n",s[i].name,s[i].gender,s[i].age);

//    }

//    

//    //2.

//

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

//        if ((s+i)->name[0]>='a'&&(s+i)->name[0]<='z') {

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

//        }

//        (s+i)->age+=10;

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

//    }

//

//指针数组

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

    

//    int a = 2, b = 4, c = 6;

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

//    printf("%p\n", array[0]);//&a

//    printf("%p\n", array[1]);//&b

//    printf("%p\n", array[2]);//&c

//

//    

//    printf("%p\n", *array);    //&a

//    printf("%p\n", *(array+1));//&b

//    printf("%p\n", *(array+2));//&c

//    

//    

//    printf("%d\n", *array[0]);//a

//    printf("%d\n", *array[1]);//b

//    printf("%d\n", *array[2]);//c

//    

//    printf("%d\n",**array);    //a

//    printf("%d\n",**(array+1));//b

//    printf("%d\n",**(array+2));//c

//

    //char string[] = "iphone";

    //char *p = string;

    

    

    //  给一个字符指针变量赋一个字符串,意味着把字符串的首地址存入字符指针变量

    

//    char *p = "iphone";

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

//    

//    

//    

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

//    

    

    char str1[] = "aaa";

    char str2[] = "bbb";

    char str3[] = "ccc";

    

    // 字符指针数组

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

    //char strs2[3][4] = {str1, str2, str3}; 与上面一样

//    strs[0]

//    strs[1]

//    

//    *strs

//    *(strs+1)//str2

//    

//    strs[0][0]

//    strs[0][1]

//    

//    *strs[0]

//    *(strs[0]+1)//第二个a

//    *(strs+1)

    

//    

//    printf("%p\n",strs[0]);//地址

//    printf("%s\n",strs[0]);//字符串aaa

//    

//    printf("%p\n",*(strs+1));//地址

//    printf("%s\n",*(strs+1));//字符串bbb

//    

//    printf("%c\n",strs[1][1]);//字符串bbb的第二个字符b

//    printf("%c\n",(*(strs+1))[1]);//字符串bbb的第二个字符b

//    printf("%c\n",*((*(strs+1))+1));//字符串bbb的第二个字符b

//    printf("%c\n",*(strs+1)[1]);//c

    

    //a[i]=*(a+i);

            return 0;

}

0 0
原创粉丝点击