【问题标题】:Passing an array of pointers as a parameter as const [duplicate]将指针数组作为参数传递为 const [重复]
【发布时间】:2017-12-02 22:14:55
【问题描述】:

假设

int a = 1;
int b = 2;
int c = 3;

int * A[3] = {&a, &b, &c};

我想知道为什么允许这样做:

void arrFunc1(int * const * arg)
{
}

而这个不是:

void arrFunc2(int const ** arg)
{
}

在一个:

int main(void) 
{
    arrFunc1(A);    // OK
    arrFunc2(A);    // Not OK

    return 0;
}

我知道这两者之间的区别。第一个函数将假定指针本身是常量并且不能更改,第二个函数假定这些指针指向的整数不能更改。但我想知道为什么不允许第二个功能?我看不出有什么理由可以破坏任何东西。

【问题讨论】:

  • 好的,我在提议的“重复问题”中找到了答案。解释here谢谢大家
  • 基本上,您可以将T 转换(分配)为const T,并将T * 转换为const T *,但到此为止,不能再进一步将T ** 转换为@ 987654331@,原因在上面的链接中说明。

标签: c arrays pointers constants


【解决方案1】:

因为int const ** arg 你说arg 是一个指向const int 的指针,但abc 不是const int 变量。

对于int * const * arg,您说arg 是一个指向int 的常量指针 的指针。 IE。你不能改变什么,例如arg[0] 指向。

【讨论】:

  • 是的,abc 不是 const int,但这并不能阻止我调用一个假设它们是 const 的函数,比如 @987654336 @。就我而言,我添加了一层间接性,但我所要求的仍然完全相同,我看不出它如何破坏任何东西
猜你喜欢
  • 2013-03-16
  • 2016-04-15
  • 2018-05-14
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
相关资源
最近更新 更多