zoukankan      html  css  js  c++  java
  • 4,二维数组中指针的问题

    一、问题来源:


    1 int a[3][4],下面哪个不能表示 a[1][1]?
    2 *(&a[0][0]+5)
    3 *(*(a+1)+1)
    4 *(&a[1]+1)
    5 *(a[1]+1)

    这显然考察了二维数组中指针的问题,为了更全面的理解这个问题,我们打印出各个变量的类型和值,来判断哪个选项正确。

    二、测试代码如下:


     1 #include <iostream>
     2 #include <typeinfo>
     3 using namespace std;
     4 
     5 int main(int argc, char** argv) {
     6     /*vector<int> v = {3, 2, 2, 4, 7, 9, 10, 1, 1};
     7     Soultion s;
     8     s.reOrderArray3(v);
     9     for (auto element : v) {
    10         cout << element << " " ;
    11     }*/
    12 
    13     double a[3][4] = {{0, 1, 2, 3},
    14                    {4, 5, 6, 7},
    15                    {8, 9, 10, 11}};
    16 
    17 
    18     cout << typeid(a).name() <<"	"
    19          << typeid(*a).name() <<"	"
    20          << typeid(a[0]).name() <<"	"
    21          << typeid(&a[0]).name() <<"	"
    22          << typeid(&a[0][0]).name() <<"	"
    23          << typeid(**a).name() << endl ;
    24     cout << a <<"	"
    25          << *a <<"	"
    26          << a[0] <<"	"
    27          << &a[0] <<"	"
    28          << &a[0][0] << endl;
    29     cout << a[1] <<"	"
    30          << &a[1] << endl;
    31     /*
    32     cout << *(&a[0][0] + 5) << endl;
    33     cout << *(*(a + 1) + 1) << a+1 << ' '<<*(a+1) <<endl;
    34     cout << *(&a[1] + 1) <<' ' << a[2] <<  endl;
    35     cout << *(a[1] + 1) <<endl;*/
    36 
    37 
    38     return 0;
    39 }

    结果输出,

    从结果中我们可以看到,

    1, a: 二维数组类型,A3_A4_d。大小3*4,元素类型为double。a的值 == 二维数组的地址== a[0][0]的地址
    2,*a:一维数组类型,A4_d。大小1*4,元素类型为double。*a的值 == 第0行的地址(二维数组第0个一位数组的地址)== a[0][0]的地址
    3,a[0]: 一维数组类型,A4_d。大小1*4,元素类型为double。a[0]的值 == *a的值 == 第0行的地址(二维数组第0个一位数组的地址)==a[0][0]的地址
    4,&a[0]: 指针类型,指向一维数组,PA4_d,即 double (*)[4]。&a[0]的值 == a[0]的值 == *a的值 == 第0行的地址(二维数组第0个一位数组的地址)==a[0][0]的地址

    然后,我们回到本文最开始的题目。
    选项A,很容易判断
    选项B,*(a+1) == a[1] == a[1][0]的地址, *(*(a+1)+1) == a[1][0]
    选项C,&a[1]+1,因为&a[1]指向第1行这个1*4的一维数组,&a[1]+1则指向第2行这个二维数组,所以*(&a[1]+1) == a[2],为第2行的地址
    选项D,a[1] == &a[1][0], *(a[1]+1) == a[1][0]

  • 相关阅读:
    jQuery的end() 方法
    jQuery.extend 函数使用详解
    AutoMapper完成Dto与Model的转换
    IoC实践--用Unity实现MVC5.0的IoC控制反转方法
    IoC实践--用Autofac实现MVC5.0的IoC控制反转方法
    Unity依赖注入使用详解
    React+BootStrap+ASP.NET MVC实现自适应和组件的复用
    oracle基础开发工具及常用命令
    Cisco配置发送日志到日志服务器
    Redis讲解
  • 原文地址:https://www.cnblogs.com/letgo/p/5760851.html
Copyright © 2011-2022 走看看