zoukankan      html  css  js  c++  java
  • C++指针学习(2)

    int *p = (int *) 100;
    printf("%d\n", p+100);//输出结果是多少?
    

    p是一个指向int的指针, 强制初始化为内存地址为100的指针, p+100是p向下偏移100个int存储空间(4)后的地址, 强制转化成整形后应该输出100+100*4=500.

    注意: 不能随意操纵p指向的内容.

    int array[]={1,2,3,4,5};
    int *p= int *(&array+1);
    printf("%d%d\n", *(a+1), *(p-1));
    

    a退化为a[0]的指针, 那么a+1就是指向a[1]的指针, 所以*(a+1)的结果是2;

    &array是取int[5]的地址, 因此&array是指向int[5]的指针, &array+1就是偏移一个int[5]的地址, 值就是&array[4] + 4, p是将这个值强制转化成int *.

    p-1就是p向左偏移个int地址, 就是&array[4] + 4 - 4 = & array[4], 那么 *(p-1) 的结果就是5.

    注意: 指针加减整数n后的值并不是指针的值直接加减n, 而是指针偏移n个指针指向的内存;

  • 相关阅读:
    9 Fizz Buzz 问题
    2 尾部的零
    1 A+B问题
    递归
    互斥同步
    垃圾收集器与内存分配策略---垃圾收集算法
    10.矩形覆盖
    9.变态跳台阶
    8.跳台阶
    9.path Sum III(路径和 III)
  • 原文地址:https://www.cnblogs.com/lovelyxia/p/1722168.html
Copyright © 2011-2022 走看看