c按值传递数组?

时间:2012-06-22 15:03:02

标签: c arrays

我有这个家庭作业问题:

A部分

编写一个C程序,测试以下数据类型是通过引用还是按值传递,并将它发现的内容打印到终端:

  • INT
  • ints数组

假设,如果你的程序发现一个int是按值传递的,而一个int数组是按值传递的,那么它应该产生如下的输出:  int:按值传递 整数数组:按值传递

我理解的是int,但我得不到的是:

  1. 我认为传递数组的唯一方法是传递数组中第一个值的地址
  2. 这算作是通过值传递还是通过引用传递? (Pass an array to a function by value困惑我)
  3. 关于我如何做到这一点的提示?我假设将引用传递给另一个函数,操纵它,看看它是否发生变化,但我不确定......
  4. 编辑:如果有人用一个具体的例子向我解释这可能会有所帮助,例如:假设我在内存位置0存储了一个长度为10个整数的数组(是的,我知道,不是现实生活,但是为了这个例子...)。如果通过引用传递该数组会是什么样子?如果通过值传递它会是什么样的?

2 个答案:

答案 0 :(得分:4)

  

这是否算作传递值或通过引用传递?

当您说“将数组传递给函数”时,实际上会将指向第一个元素的指针传递给该函数。这允许被调用的函数修改数组的内容。由于没有数组的副本,因此有必要说数组是通过引用传递的。

  

有关如何执行此操作的提示?

测试应该是:

  1. main()
  2. 中创建一个本地数组
  3. 用已知模式填充
  4. 打印数组的内容
  5. 将数组传递给函数
  6. 内部函数体修改数组的内容
  7. 在函数
  8. 中打印数组
  9. main()中再次打印本地数组的内容
  10. 如果67中的输出匹配。你有证据。
  11.   

    如何按值传递数组?

    只有通过值传递数组的可能方法是将其包装在结构中 Online Sample

    #include <iostream>
    
    struct myArrayWrapper 
    {
        int m_array[5];
    };
    
    void doSomething(myArrayWrapper a) 
    {
        int* A = a.m_array;
    
        //Display array contents
        std::cout<<"\nIn Function Before Modification\n";
        for (size_t j = 0; j < 5; ++j)
           std::cout << ' ' << A[j];
        std::cout << std::endl;
    
         //Modify the array
         for (size_t j = 0; j < 5; ++j)
           A[j] = 100;
    
        std::cout<<"\nIn Function After Modification\n";
        //Display array contents
        for (size_t j = 0; j < 5; ++j)
           std::cout << ' ' << A[j];
        std::cout << std::endl;
    
    }
    
    int main()
    {
        myArrayWrapper obj;
        obj.m_array[0] = 0;
        obj.m_array[1] = 1;
        obj.m_array[2] = 2;
        obj.m_array[3] = 3;
        obj.m_array[4] = 4;
        doSomething(obj);
    
        //Display array contents
        std::cout<<"\nIn Main\n";
        for (size_t j = 0; j < 5; ++j)
           std::cout << ' ' << obj.m_array[j];
        std::cout << std::endl;
    
        return 0; 
    }
    

    输出

    In Function Before Modification
     0 1 2 3 4
    
    In Function After Modification
     100 100 100 100 100
    
    In Main
     0 1 2 3 4
    

答案 1 :(得分:2)

C只按值传递函数参数。

来自强大的Kernighan&amp;里奇,第2版:

  

(1.8,按值调用)“在C中,所有函数参数都通过”value“传递