繁体   English   中英

用函数和指针改变数组的元素

[英]Changing array's elements with function and pointer

我正在尝试使用具有指针参数的函数更改数组的值

#include <stdio.h>

void store(int *arr1, int place) {
int i;
for(i = 0; i < sizeof(*arr1); i++) {
    printf("Value %d: ", i+1);
    printf("\n");
    scanf("%d", &*arr1[place]);
    place++;
}

for(i = 0; i < sizeof(*arr1); i++) {
    printf("Element %d: %d", i, *arr1[place]);
    printf("\n");
    place++;
}



}

int main()
{
int arr[5];

store(&arr, 0);

return 0;
}

但它让我变成这样:

错误:一元“*”的无效类型参数(有“int”)

这应该可以正常工作,让我尝试解释为什么我进行了这些更改。

#include <stdio.h>
#define MAX_LENGTH 5 //preprocessor directive

void store(int arr1[]) {
int i;
for(i = 0; i < MAX_LENGTH; i++) {
    printf("Value %d: ", i+1);
    printf("\n");
    scanf("%d", &arr1[i]); 
}
for(i = 0; i < MAX_LENGTH; i++) {
    printf("Element %d: %d", i, arr1[i]); //maybe also i+1?
    printf("\n");
}
}

int main()
{
int arr[MAX_LENGTH];

store(arr); //only one parameter needed

return 0;
}

数组本身是一个指针,指向一个内存位置,array[0] 是第一个元素,array[1] 是第一个元素的内存位置加上数据类型的大小,在这种情况下是一个整数。 所以如果你想把它作为指针传递给函数,你不需要指定它是一个指针,你也不必告诉函数它是一个指针。

sizeof() 函数计算数组内部的位数,这意味着您必须将其除以数据类型(最好这样做,而不是使用固定数字,因为整数的大小(例如)可能会因机器)。

int i = sizeof(arr1) / sizeof(arr1[0]) //brackets indicate single integer

由于您还没有初始化任何值,因此您不会从中得到 5,这就是为什么我决定使用顶部的 #define 设置一个值,这是一个预处理器指令,允许您设置一个值可以访问您的两个功能。

我也选择删除place变量,好像没有必要,因为你还不如用i,如果你想用它,你必须给它设置一个初始值,否则它只会使用它存储的任何值内存位置,这会导致错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM