相关疑难解决方法(0)

将数组传递给函数(以及它在C++中不起作用的原因)

我遇到了一些编译的C代码,但我不明白为什么.具体来说,我有一个C库,它有很多使用这种格式的代码:

void get_xu_col(int i_start,
                int n,
                double x[n],
                int n_x,
                int n_u,
                int n_col,
                double xu_col[n_col][n_x + n_u]){
    ... 
}

int main(){
    ...
    double xu_col[n_col][n_x + n_u];
    get_xu_col( ..., xu_col );
    ...
}
Run Code Online (Sandbox Code Playgroud)

我不明白的是编译器允许在数组中调整大小的原因.据我所知,尺寸必须固定(例如xu_col[9][7])或未定义(例如xu_col[][]).在上面的代码中,似乎大小不是编译时常量.

编译器是否只是忽略了这里的参数?或者它是否真的在维度上进行编译时检查?

如果是后者,那么分别传递尺寸似乎容易出错.

问题的第二部分是:

为什么相同的版本在C++中不起作用?当我从字面上文件扩展名从改变.c.cpp,并尝试重新编译,我得到

candidate function not viable: no known conversion from 'double [n_col][n_x + n_u]' to 'double (*)[n_x + n_u]' for 7th argument
void get_xu_col(int i_start, int n, double x[n], int n_x, int n_u, int n_col, double …
Run Code Online (Sandbox Code Playgroud)

c c++

44
推荐指数
5
解决办法
6540
查看次数

在c ++中创建一个常量数组

有没有理由为什么代码块告诉我我不能创建一个数组?我只是想做:

const unsigned int ARRAY[10] = {0,1,2,3,4,5,6,7,8,9};
Run Code Online (Sandbox Code Playgroud)

它给了我

错误:在'{'标记之前,不允许使用括号括起的初始值设定项

我已经更改了初始化程序的其他部分,但错误总是说同样的事情.这似乎没有意义,因为这是我在c ++中学到的第一件事.

c++ arrays codeblocks

37
推荐指数
2
解决办法
6万
查看次数

字符数组的文字字符串初始值设定项

在以下规则中,当数组衰减到指针时:

左值[见2.5问题]型阵列的-T出现在表达衰变(有三个例外)转换成一个指向它的第一个元素的; 结果指针的类型是指向T的指针.

(例外情况是,当阵列是的sizeof或&运算符的操作数,或为字符数组一个文本字符串初始化.)

如何理解数组是"字符数组的文字字符串初始值设定项"的情况?请举个例子.

谢谢!

c arrays string pointers c99

34
推荐指数
3
解决办法
9740
查看次数

为什么数组不能作为函数参数传递?

为什么不能将数组作为函数参数传递?

我一直在阅读这本C++书,上面写着"你不能将数组作为函数参数传递",但它从未解释过为什么.此外,当我在网上查找时,我发现了一些评论,比如'你为什么要这样做?' 这不是我会这样做的,我只是想知道为什么你不能这样做.

c++ arrays pointers pass-by-reference

34
推荐指数
3
解决办法
9124
查看次数

如何在复制控制功能中处理C++数组成员?

这是我长期以来一直想知道的事情.请看以下示例:

struct matrix
{
    float data[16];
};
Run Code Online (Sandbox Code Playgroud)

我知道默认构造函数和析构函数在这个特定示例中做了什么(没有),但是复制构造函数和复制赋值运算符呢?

struct matrix
{
    float data[16];

    // automatically generated copy constructor
    matrix(const matrix& that) : // What happens here?
    {
        // (or here?)
    }

    // automatically generated copy assignment operator
    matrix& operator=(const matrix& that)
    {
        // What happens here?

        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

它涉及std::copystd::uninitialized_copymemcpymemmove或什么?

c++ arrays copy-constructor assignment-operator

31
推荐指数
1
解决办法
4198
查看次数

std :: end如何知道数组的结尾?

std::beginstd::end知道一个container或一个的开始和结束array.

它很容易知道endbeginvector为例子,因为它是一个类,给出了这样的信息.但是,它如何知道如下结束array呢?

int simple_array[5]{1, 2, 3, 4, 5};
auto beg=std::begin(simple_array);
auto en=std::end(simple_array);
Run Code Online (Sandbox Code Playgroud)

std::begin并不难知道数组的起始位置.但它如何知道它的结束?将常数整数5存储在某处吗?

如果我得到一些低级信息的答案,我将不胜感激.

c++ arrays c++11

29
推荐指数
3
解决办法
6297
查看次数

如何在内存中代表C阵列?

我相信如果你使用C,我理解在内存中如何表示正常的变量和指针.

例如,很容易理解指针Ptr将具有一个地址,并且它的值将是一个不同的地址,这是它指向的内存空间.以下代码:

int main(){
    int x = 10;
    int *Ptr;
    Ptr = &x;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

将在内存中具有以下表示:

+---------------------+-------------+---------+
| Variable Name       | Address     | Value   | 
+---------------------+-------------+---------+
| x                   | 3342        | 10      |
+---------------------+-------------+---------+
| Ptr                 | 5466        | 3342    |
+---------------------+-------------+---------+
Run Code Online (Sandbox Code Playgroud)

但是我发现很难理解数组如何在内存中表示.例如代码:

int main(){
    int x[5];
        x[0]=12;
        x[1]=13;
        x[2]=14;

    printf("%p\n",(void*)x);
    printf("%p\n",(void*)&x);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出相同的地址两次(为简单起见10568).意思是x ==&x.然而,*x(或数组符号中的x [0])等于12,*(x + 1)(或数组符号中的x [1])等于13,依此类推.怎么能代表这个?一种方法可能是这样的:

+---------------------+-------------+----------+----------------------+
| Variable Name       | Address     | Value    | Value IF array       |
+---------------------+-------------+----------+----------------------+
| x                   | 10568 …
Run Code Online (Sandbox Code Playgroud)

c arrays memory-management

26
推荐指数
2
解决办法
3万
查看次数

如何查找整数数组的大小

如何在C中查找整数数组的大小

任何方法都可用而不遍历整个数组一次,以找出数组的大小.

c arrays

25
推荐指数
2
解决办法
12万
查看次数

19
推荐指数
2
解决办法
4969
查看次数

在C++中使用的奇怪声明

stackoverflow的上一个问题中的一段代码中,我看到了这个,对我来说很奇怪,声明using:

template <std::size_t SIZE> 
class A
{
public:
  ...
  using const_buffer_t = const char(&)[SIZE];
  ...
};
Run Code Online (Sandbox Code Playgroud)

有人可以解决以下问题:

  1. 它代表什么类型?
  2. 我们在哪里需要这种声明?

c++ c++11

19
推荐指数
2
解决办法
1209
查看次数