【问题标题】:copy array in c++ [duplicate]在c ++中复制数组[重复]
【发布时间】:2013-01-10 17:20:55
【问题描述】:

你好,我有这个功能:

void vector(int imputC[]) { 
    //return v*   
    //imputC[].lenght
    int a =sizeof(imputC) / sizeof(int);
    // float v[2 * a + 2];
    // v[0]=0;
    for (int i = 0; i < a ; i++)
        v[i] =(float)imputC[i];

    for(int j = 0; j < 10; j++)
        cout << a << endl;
}

主要:

int main() {
    int array[] = { 23, 5, -10, 0, 0, 321, 1, 2, 99, 30 };
    // float *v[22];
    vector(array);
}

a 的大小是 1。这是为什么呢?我不明白,我认为这是唯一的对象。

【问题讨论】:

  • 这是你能想到的最好的格式吗?
  • 究竟为什么要打印出a 10 次?
  • sizeof() 不是为了那个。 "sizeof 用于计算任何数据类型的大小,以表示该类型所需的字节数" 来衡量。在使用函数之前阅读文档。
  • @MarcB - 只是为了真正确保 a 为 1。或者使数组具有 1111111111 个元素。
  • 假设您实际使用的是 C++,只需使用向量而不是数组,复制就变得很简单(只需使用像 auto b = a; 这样的赋值)。

标签: c++ arrays int


【解决方案1】:

表达式sizeof(imputc) 在您的函数中不起作用,因为数组作为指针传递并且不保留原始数组的大小。所以这个表达式只返回指针的大小,而不是它指向的数组。

如果必须将数组传递给需要知道数组中项目数的函数,则必须始终将数组大小作为参数传递给该函数。

【讨论】:

    【解决方案2】:

    在将数组类型作为参数的函数声明中,数组类型衰减为指向第一个元素的指针。所以

    void vector(int imput[])
    

    一样
    void vector(int *imput)
    

    接受数组参数的函数需要有其他方法来获取数组中元素的数量。

    【讨论】:

      猜你喜欢
      • 2021-07-12
      • 2013-02-23
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 2015-06-14
      相关资源
      最近更新 更多