美文网首页
C语言指针的实例体验

C语言指针的实例体验

作者: 花不休 | 来源:发表于2017-05-04 19:50 被阅读51次

    引言
    到了春季的三四月份,东区的各大实验室都开始陆续纳新。大多数的纳新试题都考到了C语言有关的知识,看到3G实验室的一道题,这让我想起当我面试实验室的时候的一道题,非常有趣,今天我来和大家分享一下这道题
    #include <stdio.h> int main (){ int a[4]={1,2,3,4}; int*ptr1=(int*)(&a+1); int*ptr2=(int*)((int)a+1); printf("%x,%x",ptr1[-1],*ptr2); return 0; }
    这道题涉及到了指针,数组,强制类型转换以及运算符的优先级和大端序小端序,主要是体会指针指向的特点。

    在我电脑上输出的值是 4,0200 0000(2000000)
    然后让我给大家详细的分析一下这道题;
    a是一个具有4个整型变量的数组的名字, &a是数组的首地址。&a+1表示让指针指向下一个数据,于是a的指向了4的下一个地址,用此来初始化ptr1,所以part1的指向如下:

    3131633928877076304965.JPG

    在ptr1初始化的时候,令&a+1强制转换成整型指针,所以 ptr1[-1]相当于把ptr1往前挪一个整型大小,即4个字节,然后呢,


    3232633928876693817205.JPG

    所以呢,打印出的第一个数字是a[3]的内容,即4

    第二部分

    ptr2先将a组数转化成整形变量,然后加1然后再转化成整形指针,所以此时 ptr2的指向在

    asf633928867105530290.JPG

    然后因为整形为四个字节,所以此时指向的是a{0}的后三个字节和a[1]的第一个字节,具体如下图(在x86系统下的数据存储),

    dfadsfasfasfdasdfasdff.JPG

    因为x86系统是小端序,读取数据或存储数据的时候是最低位对应低地址,所以打印
    0200 0000。

    相关文章

      网友评论

          本文标题:C语言指针的实例体验

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