gpt4 book ai didi

c 按值传递数组?

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:18 25 4
gpt4 key购买 nike

我有这个家庭作业问题:

A 部分

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

  • 内部
  • 整数数组

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

我理解的int,但是我没有理解的是:

  1. 我认为传递数组的唯一方法是传递数组中第一个值的地址
  2. 这是按值传递还是按引用传递? (Pass an array to a function by value 把我弄糊涂了)
  3. 有关如何执行此操作的提示?我假设将引用传递给另一个函数,对其进行操作,然后查看它是否发生了变化,但我不确定....

编辑:如果有人用一个具体的例子向我解释这可能会有所帮助,例如:假设我有一个长度为 10 的整数数组存储在内存位置 0(是的,我知道,这不是现实生活,但为了这个例子...)。如果该数组是通过引用传递的,它会是什么样子?如果按值传递会是什么样子?

最佳答案

Does this count as passing by value or passing by reference?

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

Hints on how I can do this?

测试应该是:

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

How do you pass an array by value?

按值传递数组的唯一可能方法是将其包装在结构中。
<强> 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

关于c 按值传递数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11158858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com