美文网首页
二、常量指针

二、常量指针

作者: faterman | 来源:发表于2018-01-24 17:26 被阅读4次
    题目:请写出以下代码输出
    
     int a[5] = {1, 2, 3, 4, 5};
     int *ptr = (int *)(&a + 1);
     printf("%d, %d", *(a + 1), *(ptr + 1)); // 2,随机值
    

    输出解释:
    a代表有5个元素的数组的首地址,a[5]的元素分别是1,2,3,4,5。接下来,a + 1表示数据首地址加1,那么就是a[1],也就是对应于值为2.但是,这里是&a + 1,因为a代表的是整个数组,它的空间大小为5 * sizeof(int),因此&a + 1就是a+5。a是个常量指针,指向当前数组的首地址,指针+1就是移动sizeof(int)个字节。
    因此,ptr是指向int 类型的指针,而ptr指向的就是a + 5,那么ptr + 1也相当于a + 6,所以最后的(ptr + 1)就是一个随机值了。而*(ptr – 1)就相当于a + 4,对应的值就是5。

    相关文章

      网友评论

          本文标题:二、常量指针

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