我查看了所有其他类似主题的帖子,没有任何帮助,所以请不要标记为重复.
我正在定义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常量来声明我的数组.
编辑:动态数组不是我需要的.我只想要一个普通的,命名的数组,用传递给函数的常量大小值定义.
我有一个函数,它接受一个指向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++中使用数组?
我不知道如何推送一个char数组.
例如,如果我在char数组中有"HI.MY.NAME.IS",
我想在中间放一个字符并将字符向右推.
所以它会像"HI.MY.SLAME.IS"之类的东西.
任何可能的解决方
这两种释放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)
这两个代码是等价的吗?
将
string示例[];
是一个数值不确定的数组?如果可以,我可以将.txt文件中的值导入其中,即使我不知道有多少项?