zoukankan      html  css  js  c++  java
  • C++指针相关问题

    C++指针相关问题

    一、总结

    一句话总结:

    a、数组名是这个数组的首地址:a[3][4]:a int(*)[4]、&a int(*)[3][4]、a[0] int*、a[0][0] int
    b、int ** 表示指向指针的指针:int m = 1; int *p = &m; int ** a = &p;
    c、数组指针和指针数组:指针数组:int*[]:int* a[3]:array of pointers,数组指针:int(*)[]:int (*a)[3]:a pointer to an array

    1、数组名对应的指针?

    a、定义一个一维数组,数组名是这个数组的首地址
    b、int a[5]; a指向 a[0];a[0]是int的元素,a的类型就是int*

    2、a和&a的值(地址)是一样的,但是类型不一样?

    *、a 这个地址指向a[0]int元素,所以a+1偏移4
    *、&a 这个地址指向整个数组,&a的类型是int(*)[5],所以&a+1偏移20

    3、用指针来接收一个数组int a[5]={1,2,3,4,5};?

    因为a是a[0]的地址,为int *类型,所以可以用一个int *类型的变量来接收它,int *p=a;


    int a[5]={1,2,3,4,5};
    因为a是int *类型
    所以可以用一个int *类型的变量来接收它
    int *p=a;
    这里的p就是指向的是a[0]的首地址

    *p是a[0]的值
    *(p+1)是a[1]的值

    4、int a[5]={1,2,3,4,5}; int *p=a; *(p+i)和*p++的区别是什么?

    *(p+i),都是依次访问地址对应的元素,这里p地址不变
    *p++,都是依次访问地址对应的元素,这里p地址改变


    所以也可以用*p++,两个都是单目运算符,从右往左

    5、多维数组在内存里面的存储方式?

    二维数组,比如a[3][4]虽然有3行4列,但是在内存里面还是是一段连续的地址


    a是二维数组的首地址,a指向二维数组第一个存储单元:
    a是指向a[0]这个一维数组,a的类型是 是int(*)[4]
    a+1 加的是16个字节

    a[0]是什么,是一维数组的数组名
    a[0]指向a[0][0],a[0]的类型是int *
    所以a[0]+1 是加的4个字节


    a int(*)[4]
    &a int(*)[3][4]
    a[0] int*
    a[0][0] int

    6、二维数组,比如a[3][4],a、&a、a[0]、a[0][0]对应的类型分别是什么?

    a int(*)[4]
    &a int(*)[3][4]
    a[0] int*
    a[0][0] int

    7、多维表的指针情况?

    1、&a   int(*)[][][][]
    2、a    int(*)[][][]
    3、a[][][]  int*
    4、a[][][][]  int


    &a   int(*)[][][][]
    a    int(*)[][][]
    a[]   int(*)[][]
    a[][]  int(*)[]
    a[][][] int*
    a[][][][] int

    8、指针数组和数组指针分别是什么?

    指针数组:int*[]:int* a[3]:array of pointers,即用于存储指针的数组,也就是数组元素都是指针
    数组指针:int(*)[]:int (*a)[3]:a pointer to an array,即指向数组的指针

    9、如何理解int (*a)[4]是数组指针,也就是指向数组的指针,也就是指向a数组的指针?

    (*a)表示一个整体,*号本来就是声明变量为指针的符号,那说明a就是一个指针,并且是执行a[5]数组的指针

    10、如何理解int* a[4]是指针数组,也就是数组a中的元素都为int型指针?

    这里int*是一个整体,说明是int指针类型,后面的a[4]也就表示数组里面就是存的int *的东西

    11、数组指针和指针数组使用实例?

    int *a[4];int c[4]={1,2,3,4}; a[1]=&c[1];//指针数组
    int (*b)[4];int c[4]={1,2,3,4}; b=&c; //数组指针
    #include <iostream>
    using namespace std;
    int main()
    {
        int c[4]={1,2,3,4};
        int *a[4]; //指针数组
        int (*b)[4]; //数组指针
        b=&c;
        //将数组c中元素赋给数组a
        for(int i=0;i<4;i++)
        {
        a[i]=&c[i];
        }
        //输出看下结果
        cout<<*a[1]<<endl; //输出2就对
        cout<<(*b)[2]<<endl; //输出3就对
        return 0;
    }

    12、c/c++中,int ** a;是什么意思啊?

    指向int指针的指针:int m = 1; int *p = &m; int ** a = &p;


    在定义一个变bai量的时候,*表示指针
    比如duint * a,表示a是一个指向int的指针
    int **a相当于(int *) * a,表示a是一个指向int *的指针(通俗dao点说就是a的值是一个指针,或者说地址),即指向int指针的指针,这是2级指针。
    int m = 1;
    int *p = &m;
    int ** a = &p;

    int**是指向指针的指针,和数组与指针的关系不是一回事

    13、c++new关键字创建数组?

    new其实就是告诉计算机开辟一段新的空间,但是和一般的声明不同的是,new开辟的空间在堆上,而一般声明的变量存放在栈上。

    14、c++ new关键字和一般声明变量的区别是什么?

    new开辟的空间在堆上,而一般声明的变量存放在栈上。

    15、c++ new出来的东西应该赋值给什么类型的变量?

    new出来的是一段空间的首地址。所以一般需要用指针来存放这段地址。

    16、c++ new关键字实例?

    int *p = new int(3);//int 3
    int *p = new int[3];//有三个元素的int数组

    17、C++ new和数组?

    A、为了让new分配一个数组对象,我们需要在类型名之后跟一对方括号,在其中指明要分配的对象的数目。
    B、int *p = new int[INT_NUM];//方括号中的数必须是整型,但不必是常量

    18、c++释放分配的空间?

    delete p;    //p必须指向一个动态分配的对象(或空)
    delete [] p;    //p必须指向一个动态分配的数组(或空)

    二、内容在总结中

    博客对应课程的视频位置:

     
  • 相关阅读:
    Symfony Component HttpKernel Exception AccessDeniedHttpException This action is unauthorized.
    AngularJs ng-repeat中使用ng-model
    JS数组排序sort()方法同时按照两种方式排序的用法
    MongoDB
    Node基本学习
    小程序 五 组件使用
    小程序 四 事件类型
    小程序 二 template模板(代码复用)
    小程序 wxs 脚本语言(2种使用方式)
    小程序初体验 wx:for
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/13054484.html
Copyright © 2011-2022 走看看