c语言求教各位大佬

请问各位c语言大佬#include<stdio.h>
void enter(int* arr, int x)
{
int i = 0;
for (i = 0; i < x; i++)
{
scanf_s("%d", &arr[i]);
}
}
int main() {
int arr[10] = { 0 };
int* p1 = arr;
printf("请输入10个整数:\n");
enter(arr, 10);
return 0;
}
enter函数的&arr[i]为啥我一开始用arr++来代替输入不了数据?

在 C 语言中,数组名是数组的首地址,而且数组名是一个常量指针,不可以直接修改。当你在 enter 函数中使用 `arr++` 来代替 `&arr[i]`,这会导致一些问题:
1. 数组名是常量指针:数组名 arr 在函数 enter 中是一个常量指针,其值是数组的首地址,一旦声明后,它的值不能被改变。因此,你不能使用 `arr++` 来移动数组名的位置。
2. 传递指针的副本:当你在 main 函数中调用 enter 函数时,实际上是将数组 arr 的首地址拷贝给了 enter 函数的形参 `int* arr`。在函数中对形参的修改并不会改变 main 函数中原始数组的内容。因此,使用 `arr++` 只会改变形参的值,并不会改变 main 函数中的原始数组 arr。
正确的方法是,直接使用数组名 arr 或者数组指针 p1 来代替 `&arr[i]`,如下所示:
```c
#include <stdio.h>
void enter(int* arr, int x) {
int i = 0;
for (i = 0; i < x; i++) {
scanf_s("%d", &arr[i]);
}
}
int main() {
int arr[10] = { 0 };
int* p1 = arr;
printf("请输入10个整数:\n");
enter(arr, 10);
return 0;
}
```
在上面的代码中,`&arr[i]` 被替换为 `&arr[i]`,而且指针 p1 没有被使用。函数 enter 正确地接收了数组 arr 的地址,然后通过指针 arr 来修改数组的内容。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-07-26
arr是一个指针,指向了存放arr数字的地址。
arr指针地址被修改的话,指向的数据区域就不对了。
本题中,int存储占用2个字节,但是arr++只移动了1个字节,这就导致数组中数据会被破坏掉。
第2个回答  2023-07-25
i只读,他是for的变量,scanf是要写他啊