当前位置 博文首页 > 晓东、的博客:指针小心得

    晓东、的博客:指针小心得

    作者:[db:作者] 时间:2021-09-20 10:50

    #include<stdio.h>
    int main()
    {
        int arr[2]={1,2};
        printf("%p\n",&arr[0]);
        printf("%p\n",&arr[1]);
        return 0;
    }
    

    如此代码块中,数组arr中存储两个常量,获取他们地址可知

    在16进制数据储存中,c相当于12,又知在int环境下,可看出在存储中两个数据是紧挨着的

    #include<stdio.h>
    int main()
    {
        int arr[2]={1,2};
        printf("%p\n",&arr[0]);
        printf("%p\n",&arr[1]);
        printf("%p\n",&arr[2]);
        printf("%p\n",&arr[3]);
        return 0;
    }
    

    ?

    ?取地址可知在arr数组末尾必存在一个地址0061FF1G,该地址存储的数据应为'\0'

    在数据存储中即使未存储变量,电脑中已经开辟了一个存储空间用于存储将来需要存储的数据

    #include<stdio.h>
    int main()
    {
        char str1[100],str2[100],*p=str1,n=0;
        printf("%p",&str1);
        printf("输入第一个字符串:");
        scanf("%s",str1);
        printf("%p\n",&str1[0]);
        printf("%p",&str1[1]);
        return 0;
    }
    

    在数据中*p存储的是相应的值,可以通过传递地址给它

    &a等于a等于a[0];相邻的int数组单元的地址差距永远是4。

    二.指针再深入

    在C语言中指针是指向变量的,指针存储着相应的地址,变量修改地址也相应修改,这与赋值符不同,指针所指向的随着变量不断变化着,赋值符中变量的变化是一次性的,无连续性,指针是连续性变化的。

    #include<stdio.h>
    int main()
    {
        int a=12;
        int *p=&a;
        printf("%d\n",*p);
        printf("%p\n",a);
        a=14;
        printf("%d\n",*p);
        printf("%p",a);
        return 0;
    }
    

    三、数组指针与指针数组

    避免数组越级

    优先级:优先级:()>[]>*

    1.数组指针本质上是指针,指向一个数组类型。

    int (*p2)[3]

    #include<stdio.h>
    int main()
    {
    //    int *arr;
    //    int a=1;
    //    arr[0]=a;
    //    arr[1]=2;
    //    printf("%d\n",*arr);
    //    printf("%d\n",arr[0]);
    //    printf("%d\n",arr[1]);
    //    printf("%d",*(arr+1));
    //    int *p[3];//本质上是一个数组,里面储存的是地址,指针数组(类比于整型数组就比较好理解了)
    //    int a[3]={1,2,3};
    //    p[0]=&a[0];
    //    printf("%d",*p[0]);
        int (*p2)[3];
        int a[3]={1,2,3};
    //    p2=&a;
    //    printf("%d",*p2[0]);可运行 运行结果为1,其余均不可运行
        return 0;
    }
    

    是指一个里面储存着的都是整型

    2.指针数组本质上是数组,类比于整型数组,储存相应地址类型。

    int *p[3];

    是指一个数组里面存储着地址

    #include<stdio.h>
    int main()
    {
    //    int *arr;
    //    int a=1;
    //    arr[0]=a;
    //    arr[1]=2;
    //    printf("%d\n",*arr);
    //    printf("%d\n",arr[0]);
    //    printf("%d\n",arr[1]);
    //    printf("%d",*(arr+1));
        int *p[3];//本质上是一个数组,里面储存的是地址,指针数组(类比于整型数组就比较好理解了)
        int a[3]={1,2,3};
        p[0]=&a[0];
        printf("%d",*p[0]);
        return 0;
    }
    

    四、指针的先后顺序

    #include<stdio.h>
    int main()
    {
    	int a=1;
    	int *i=&a;//程序先将&a赋值给i,相当于i等于&a
    	printf("%d",*i);
        return 0;
    }

    cs
    下一篇:没有了