相关疑难解决方法(0)

C++:在函数内部声明数组时,表达式必须具有常量值

我查看了所有其他类似主题的帖子,没有任何帮助,所以请不要标记为重复.

我正在定义main()一个const int SIZE = 20;.然后,我将此作为参数传递给我的函数Mode:

int* Mode(int* numbers, int & mode, const int SIZE)
 {
     int occurences[SIZE];

     // Calcualte mode
 }
Run Code Online (Sandbox Code Playgroud)

但是,我得到了错误expression must have a constant value.

我的函数调用(在main中)看起来像这样:

int* occurencesPtr = Mode(numbersPtr, mode, SIZE);
Run Code Online (Sandbox Code Playgroud)

有了SIZE开头的文字被定义20.

我理解错误是因为函数的版本SIZE仅在调用函数时获取其值(?),但我不知道如何解决这个问题.

我甚至尝试过传递给函数a const int * const SIZEPtr = &SIZE,但这也没有用.救命?

编辑:我不是想使用可变大小!! 请注意,我做了SIZE一个const无处不在!我只想使用相同的SIZE常量来声明我的数组.

编辑:动态数组不是我需要的.我只想要一个普通的,命名的数组,用传递给函数的常量大小值定义.

c++ arrays pointers const

0
推荐指数
2
解决办法
4013
查看次数

为什么在函数声明中传递const指针参数无效

问题描述

我有一个函数,它接受一个指向const double数组的const指针,在该数组上我使用大小作为my_func内的边界检查进行循环。

在.h中声明

void my_func(const double * const my_array, size_t size);
Run Code Online (Sandbox Code Playgroud)

在.c中实现

void my_func(const double * const my_array, size_t size) {
  for (size_t idx = 0; idx < size; idx++) {
    do_something_with(my_array[idx]);
  }
}
Run Code Online (Sandbox Code Playgroud)

我不希望在函数内部更改指针,从而使其成为现实* const。我不希望它指向的数据被更改,因此const double

但是Clang-Tidy希望我让函数声明将const放到指针上,使其变为

void my_func(const double * my_array, size_t size);
Run Code Online (Sandbox Code Playgroud)

Clang-Tidy:参数'my_array'在函数声明中是const限定的;参数的const限定仅在函数定义中起作用

如果我遵循该建议,但又希望保持上面的约束,那么我的函数声明和定义将不再相同。

问题

1)
假设我的指针参数不是const(const double * pointer_arg),如果我pointer_arg在函数内部进行更改以指向另一个const double,则该更改在函数外部是否可见?也就是说,在执行完我的函数的那一行之后,填充pointer_arg指向何处?如果看不见,是否表示指针已按值复制?这有可能吗?

2)
声明声明中的const无效的决定背后的原因是什么?

3)
在声明和定义中使用不同的函数签名可能会有什么好处?对我来说,看我的头文件还不清楚实现的工作原理,函数内部是否为const,不是吗?这让我或代码合作者感到困惑。

4)
我应该在声明中删除const吗?什么是最好的做法,在这种情况下?

c pointers arguments

0
推荐指数
1
解决办法
232
查看次数

如何推送char数组?

可能重复:
如何在C++中使用数组?

我不知道如何推送一个char数组.
例如,如果我在char数组中有"HI.MY.NAME.IS",
我想在中间放一个字符并将字符向右推.
所以它会像"HI.MY.SLAME.IS"之类的东西.

任何可能的解决方

c c++ arrays string char

-2
推荐指数
1
解决办法
6855
查看次数

删除2D数组C++

这两种释放2D阵列的方法是否相似?

int** M = new int*[5];

for (int i = 0; i < 5; ++i)
    M[i] = new int[3];

for (int i = 0; i < 5; ++i) {
    for (int j = 0; j < 3; ++j) {
        M[i][j] = i + j;
    }
}
Run Code Online (Sandbox Code Playgroud)

删除我:

for (int i = 0; i < 5; ++i)
    delete [] M[i];
delete [] M;
Run Code Online (Sandbox Code Playgroud)

并删除II:

delete [] *M;
delete [] M;
Run Code Online (Sandbox Code Playgroud)

这两个代码是等价的吗?

c++ arrays pointers

-3
推荐指数
2
解决办法
2976
查看次数

你可以将数量保留在一个未知的数组中吗?

string示例[];

是一个数值不确定的数组?如果可以,我可以将.txt文件中的值导入其中,即使我不知道有多少项?

c++

-3
推荐指数
1
解决办法
51
查看次数

标签 统计

c++ ×4

arrays ×3

pointers ×3

c ×2

arguments ×1

char ×1

const ×1

string ×1