【问题标题】:What does the declaration '(int *) ptr[N]' mean in C?C 中的声明 '(int *) ptr[N]' 是什么意思?
【发布时间】:2013-11-05 07:04:22
【问题描述】:

当我试图用括号强调指针数组的声明时,我发现了一个令人费解的数组,如(int *) ptr[N];

GCC C 编译器说:

error: ptr undeclared (first use in this function).

谁能解释一下错误的来源?

【问题讨论】:

标签: c arrays pointers declaration


【解决方案1】:

很简单:变量ptr 还没有被声明。不,(int *) ptr[N]; 不是声明,它是数组下标表达式的类型转换。

如果你想要一个指针数组,你应该这样做

int *ptr[N];

【讨论】:

    【解决方案2】:

    它将数组ptr的第N个元素转换为整数指针。

    错误本身表明ptr 从未被声明。你忘记或删除了我的错误这样一行:

    int *ptr[123];
    

    关于N,它似乎是一个通常定义的常量,例如像这样:

    #define N 42
    

    【讨论】:

      【解决方案3】:

      我认为编译器会将 ptr[N] 转换为类型 (int *),就像

          int a;
          double b;
          b = (double)a;
      

      所以 (int *)ptr[N] 剂量有左值,并且你之前从未声明过 ptr。 然后 gcc 编译器会告诉你 ptr 未声明。

      【讨论】:

        【解决方案4】:

        也许你可以这样做

        typedefine int* INT_PTR;
        INT_PTR ptr[N];
        

        【讨论】:

          猜你喜欢
          • 2017-12-21
          • 2022-11-13
          • 2020-02-23
          • 1970-01-01
          • 2013-08-13
          • 1970-01-01
          • 2018-04-09
          • 2014-07-11
          • 1970-01-01
          相关资源
          最近更新 更多