Const指向const的指针

时间:2017-02-15 14:43:09

标签: c pointers

我有以下函数原型:

void PerformFusionCycle( StructType const* const a[],
                         StructType2 const* const b,
                         const float32 c,
                         StructType3 * const d,
                         StructType3 * const e)

我想用函数提供函数,但我不了解如何为第一个参数声明和赋值。如果我完全按照参数的要求声明一个变量,我就无法修改它的值,而不是一个可修改的左值"出现错误。如果我声明一个变量以便我可以修改它的值,那么我会在参数#1和#34;中生成不兼容的类型。编译器错误。我该怎么做?

谢谢!

3 个答案:

答案 0 :(得分:2)

首先;该参数被读取为 <?php namespace App\Model; use Illuminate\Database\Eloquent\Model; class Chapter extends Model { protected $table = 'id','book_id','title','preface','number','createdAt','updatedAt','createdBy','updatedBy','deletedBy'; }

http://cdecl.org/是解析相当简洁的好地方 c / c ++声明语法。

以下方法可行:

array of const pointers to const StructType

答案 1 :(得分:2)

指针到指针的const-correctness一般来说非常混乱。但是,这个功能已经失控。它已经超越了const-correctness,这是一个很好的编程实践,很少或没有理由滥用const关键字。

StructType const* const a[]

在这里,您可能只想确保该函数无法修改指向指针的数据。在函数原型中没有其他任何意义。数组语法也没有帮助,因为它无论如何都会被调整为指针。将所有内容替换为const StructType** a

const float32 c,

使值const传递变量没有意义。无论如何,它是本地副本,所以谁关心它是否被功能修改?通常这只会让程序员感到困惑。根据我的经验,这样的代码通常是一个非常确定的迹象,表明原始程序员感到困惑。

同样StructType3 * const d也没有意义。指针本身是按值传递的,谁关心函数是否修改了本地副本?

保持const-correctness的完整性的调用看起来像这样:

void PerformFusionCycle( const StructType** a,
                         const StructType2* b,
                         float32 c,
                         StructType3* d,
                         StructType3* e)

答案 2 :(得分:1)

该函数的第一个参数是指向const StructType的(可能是第一个)const指针的指针。因此a的可能有效参数可以构造如下:

struct StructType const   orig[3] = { {} ,{} , {} };
struct StructType const * a[] = {
    orig, orig + 1, orig + 2
};

PerformFusionCycle(a, /* Other arguments */);