zoukankan      html  css  js  c++  java
  • C++数组和指针加减法和sizeof问题

    关于指针和加减法:

    指针的加减法:指针的加减法,加多少或者减多少,主要是看所指对象的sizeof值

    例子:

        double m = 3.0;
        int n = 3;
        double *p=&m;
        int* p1=&n;
    
        printf("p:%d
    ", p );
        printf("P+1:%d
    ", p+1);
        printf("P1:%d
    ", p1);
        printf("P1+1:%d
    ", p1+1);    

    如上图所示,p加了8,因为指向是double类型。p1加了4,因为指向了int。

    现在我定义一个数组,int a[3]={0};看一下a+1和&a+1到底加了多少:

        int p[3] = { 0 };
    
        printf("p:%d
    ", p);
        printf("P+1:%d
    ", p + 1);
    
        printf("&p:%d
    ", &p);
        printf("&p+1:%d
    ", &p+1);

    p+1加了4,&p+1加了12。

    此时p指向的是数组的第一个元素,而&p指向的一个大小为3的int数组。因此p+1加的是一个int的大小,而&p+1加的是一个int[3]数组的大小12。

    关于类型和sizeof:

    虽然如此,但是p的类型是数组,&p的类型是指针。而sizeof的值主要是根据变量类型判断的。

    int (*p1)[3]=&p;

    p1和&p的类型都是指向int [3]的指针,而p的类型就是一个int[3]的数组。PS:数组在作为参数的时候退化为一个指针。

    而sizeof主要是根据变量的类型,因此指针大小自然为4,p的大小是12。

  • 相关阅读:
    更多的bash shell命令
    Docker(一)Docker概述
    SpringCloud(一)版本选择
    Scala 技术笔记之 可变长参数
    嵌入式 ThriftServer in Spark
    Spark 代码走读之 Cache
    Scala 技术笔记之 Option Some None
    Spark作业执行
    Shuffle
    Jetty初探
  • 原文地址:https://www.cnblogs.com/LUO77/p/5886028.html
Copyright © 2011-2022 走看看