美文网首页
C语言 day9

C语言 day9

作者: y_7539 | 来源:发表于2022-06-08 17:53 被阅读0次

    指针类型的意义

    1.指针类型决定了:指针解引用的权限有多大
    2.指针类型决定了:指针走一步,能走多远(步长)

    int main()
    {
        int arr[10] = { 0 };
        int* p = arr;
        char* pa = arr;
        printf("%p\n", p);
        printf("%p\n", p+1);
        printf("%p\n", pa);
        printf("%p\n", pa+1);
        /*0093FE44
        0093FE48
        0093FE44
        0093FE45*/
    }
    
    int main()
    {
        int arr[10] = { 0 };
        int* p = arr;
        int i = 0;
        for (i = 0;i < 10;i++)
        {
            *(p + i) = 1;
        }
    }
    

    避免野指针

    1.指针初始化
    2.指针指向空间被释放掉后置空
    3.小心指针越界
    4.指针使用之前检查有效性

    指针-指针得到的是两个指针之间的元素个数(前提是两个指针指向同一空间)

    int main()
    {
        int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        int* p = arr;
        printf("%d\n", arr[2]);
        printf("%d\n", p[2]); //p[2]->*(p+2)
    
        //2和arr是操作数  
        printf("%d\n", 2[arr]);
    
    
    }
    
    int main()
    {
        int a = 10;
        //一级指针
        int* pa = &a;
        //ppa是二级指针,pa是一个变量。&pa取出pa在内存中的地址  
        int** ppa = &pa;
        //*ppa => pa      *pa => a 
    }
    

    指针数组

    整形指针数组 int * pr[5]

    结构体

    也是一些值的集合,但是值的类型可以不同

    struct Student
    {
        struct S s;
        char name[20];
        int age;
        char id[10];
    };
    
    void print1(struct Student st) {
        printf("%c %lf %s %d %s \n", st.s.c, st.s.d, st.name, st.age, st.id);
    }
    
    void print2(struct Student *stud) {
        printf("%c %lf %s %d %s\n", stud->s.c, stud->s.d, stud->name, stud->age, stud->id);
    }
    int main()
    {
        struct Student stu = {{'1', 1.11}, "张三", 17, "20202212"};
        printf("%c %lf %s %d %s\n", stu.s.c, stu.s.d, stu.name, stu.age, stu.id);
        print1(stu);  //传值调用
        print2(&stu);  //传址调用
    }
    

    函数调用的参数压栈
    函数调用会在内存的栈区开辟一块空间

    相关文章

      网友评论

          本文标题:C语言 day9

          本文链接:https://www.haomeiwen.com/subject/ncbemrtx.html