【发布时间】:2021-04-09 00:40:26
【问题描述】:
为什么不能在函数中使用 arr1=arr2?
#include <stdio.h>
int func(int* arr1, int* arr2)
{
for (int i = 0;i < 3;i++)
{
arr2[i] = i;
}
**"arr1 = arr2";**
}
int main()
{
int arr1[3];
int arr2[3];
func(arr1, arr2);
for (int i = 0;i < 3;i++)
printf("%d\n", *(arr1+i));
return 0;
}
我收到了其他人的问题。 为什么这个程序打印垃圾值。 我认为。它必须链接到单个元素 喜欢
for(int i =0; i<3; i++) { arr1[i]=arr2[i] }
但我不知道为什么,所以告诉我一些事情..
【问题讨论】:
-
函数中的
arr1 = arr2只会将一个指针的地址分配给另一个;由于这些指针参数只是副本,因此实际上什么都不会做。但是无论如何,您的代码都有未定义的行为,因为这两个数组都没有在main中初始化。 -
在你上面的程序中,你从来没有初始化
arr1。因此,当您打印arr1的内容时,您将打印出垃圾值。此外,您永远不会将 arr1 复制到 arr2 中。您正在使用 0 到 2 的值初始化 arr2。 -
@Adrian Mole 谢谢!我明白了!
-
一种语言的语法并不能告诉你任何关于底层实际发生的事情。 a = b 在不同的语言中意味着完全不同的东西。除非书中告诉你 a = b 会将 b 复制到 a 中,否则不要假设它。
-
@AdrianMole:使用未初始化的数组元素没有未定义的行为。
标签: c