gpt4 book ai didi

c++ - 数组声明和寻址

转载 作者:行者123 更新时间:2023-12-02 11:07:54 26 4
gpt4 key购买 nike

我有几个简单的问题:

  • 根据正常的c++编译器,以下正确吗?
    int arr[3][4];
    void func(int *a, int m, int n)
    {
    int i,j;
    cin>>i>>j;
    cout<< a[i*n + j]; //is this way of addressing correct provided 0<=i<m and 0<=j<n
    }

    int main()
    {
    func((int*)arr, 3,4);
    }
  • 如果严格限制数组的边界必须是一个常量表达式,那么以下内容为什么不生成编译器错误?
    int func(int m, int n)
    {
    int arr[m][n]; //m and n are not known until run time
    }
  • 最佳答案

    Is the following correct according to a normal c++ compiler?



    是的,因为该标准指定了甚至大于1个维的数组在内存中也是连续的。 但是! 您对数组索引和长度有点误解-i和j必须分别严格小于3和4。 3和4是二维数组的大小,而不是最大可能的下标。

    If the bounds of an array strictly has to be a constant expression, why doesn't the following generate compiler errors?



    也许您正在使用支持此功能的编译器作为扩展(例如GCC,Clang等)。

    关于c++ - 数组声明和寻址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12337947/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com