如何在 c 编程中的主函数之外的另一个函数中编辑数组?
How to edit an array in another function than the main function in c programming?
我想在主函数之外的另一个函数中将数组中的每个元素增加一个。然后,我想调用这个函数并在主函数中打印。
#include <stdio.h>
int function(int array2[5]) {
int i;
while(i<4) {
array2[i]=array2[i]+1;
i++;
}
return array2[5];
}
int main() {
int array[5]={1,2,3,4,5};
int answer;
answer[5]=function(array[5]);
int j;
while(j<4) {
printf("%d \n",answer[j]);
j++;
}
return 0;
}
一些重要的事情要知道:
- 在 C 中传递数组时,不会创建副本。是同一个数组,所以修改传入的数组就是修改原来的数组。
- [] 是运算符,不是变量名的一部分。
- [] 在声明类型时的工作方式与在表达式中使用时的工作方式不同。
array[5]
给出了 array
中的第 6 个元素,但是 int array[5]
声明了一个包含 5 个元素的数组。
- 访问超出分配数组末尾的元素具有未定义的行为,但通常会崩溃。
- 如果你声明一个变量
int answer
它不是一个数组,也不能成为一个数组。就一个int
- 如果你想复制一个数组,你需要显式复制。有一些标准库可以做到这一点,但您应该学会将每个元素一个一个地复制到新数组中。
给你。我想这就是你想要的:
#include <stdio.h>
// Since the array named parameters are scoped only within its function,
// they are apart from your array in the main.
void function(int array[], int len) {
int i = 0;
while(i<len) {
array[i]=array[i]+1;
i++;
}
}
// Or alternatively you can process the array using a pointer
void functionWithPointer(int *array, int len) {
int i = 0;
while(i<len) {
*(array+i) = *(array+i)+1;
i++;
}
}
int main() {
int array[]={1,2,3,4,5};
// int answer; // Not necessary
int length = sizeof(array) / sizeof(int); // !!!ATTENTION
function(array, length);
// The array values updated by 1
printf("Array values after 1st update\n");
for(int k=0; k<length; k++) {
printf("%d \n",array[k]);
}
functionWithPointer(array, length);
// The array values updated by 1 again
printf("Array values after 2nd update\n");
int j;
while(j<length) {
printf("%d \n",array[j]);
j++;
}
return 0;
}
这是输出:
Array values after 1st update
2
3
4
5
6
Array values after 2nd update
3
4
5
6
7
函数的return类型int
没有意义。
int function(int array2[5]) {
此外,您正在尝试 return 只有 5 个元素的数组中不存在的第 6 个元素。
return array2[5];
在您使用未初始化变量的函数中 i
int function(int array2[5]) {
int i;
while(i<4) {
//...
这会导致未定义的行为。此外,所使用的幻数 4
至少没有意义,因为您试图将包含 5
元素的数组传递给函数。
该函数应使用第二个参数声明,该参数指定传递的数组中的元素数。这个函数声明
int function(int array2[5]);
并不意味着传递给函数的数组恰好有 5
个元素。编译器会将函数的参数声明调整为指向数组元素类型的指针,如
int function(int *array2);
在主语句中
int answer;
answer[5]=function(array[5]);
您正在对标量类型的对象使用下标运算符 int
。所以编译器会发出错误信息。
这是一个演示程序,展示了如何定义函数。
#include <stdio.h>
void function( int a[], size_t n )
{
for ( ; n--; ++a )
{
++*a;
}
}
int main(void)
{
int a[] = { 1, 2, 3, 4, 5 };
const size_t N = sizeof( a ) / sizeof( *a );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
function( a, N );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
return 0;
}
程序输出为
1 2 3 4 5
2 3 4 5 6
我想在主函数之外的另一个函数中将数组中的每个元素增加一个。然后,我想调用这个函数并在主函数中打印。
#include <stdio.h>
int function(int array2[5]) {
int i;
while(i<4) {
array2[i]=array2[i]+1;
i++;
}
return array2[5];
}
int main() {
int array[5]={1,2,3,4,5};
int answer;
answer[5]=function(array[5]);
int j;
while(j<4) {
printf("%d \n",answer[j]);
j++;
}
return 0;
}
一些重要的事情要知道:
- 在 C 中传递数组时,不会创建副本。是同一个数组,所以修改传入的数组就是修改原来的数组。
- [] 是运算符,不是变量名的一部分。
- [] 在声明类型时的工作方式与在表达式中使用时的工作方式不同。
array[5]
给出了array
中的第 6 个元素,但是int array[5]
声明了一个包含 5 个元素的数组。 - 访问超出分配数组末尾的元素具有未定义的行为,但通常会崩溃。
- 如果你声明一个变量
int answer
它不是一个数组,也不能成为一个数组。就一个int
- 如果你想复制一个数组,你需要显式复制。有一些标准库可以做到这一点,但您应该学会将每个元素一个一个地复制到新数组中。
给你。我想这就是你想要的:
#include <stdio.h>
// Since the array named parameters are scoped only within its function,
// they are apart from your array in the main.
void function(int array[], int len) {
int i = 0;
while(i<len) {
array[i]=array[i]+1;
i++;
}
}
// Or alternatively you can process the array using a pointer
void functionWithPointer(int *array, int len) {
int i = 0;
while(i<len) {
*(array+i) = *(array+i)+1;
i++;
}
}
int main() {
int array[]={1,2,3,4,5};
// int answer; // Not necessary
int length = sizeof(array) / sizeof(int); // !!!ATTENTION
function(array, length);
// The array values updated by 1
printf("Array values after 1st update\n");
for(int k=0; k<length; k++) {
printf("%d \n",array[k]);
}
functionWithPointer(array, length);
// The array values updated by 1 again
printf("Array values after 2nd update\n");
int j;
while(j<length) {
printf("%d \n",array[j]);
j++;
}
return 0;
}
这是输出:
Array values after 1st update
2
3
4
5
6
Array values after 2nd update
3
4
5
6
7
函数的return类型int
没有意义。
int function(int array2[5]) {
此外,您正在尝试 return 只有 5 个元素的数组中不存在的第 6 个元素。
return array2[5];
在您使用未初始化变量的函数中 i
int function(int array2[5]) {
int i;
while(i<4) {
//...
这会导致未定义的行为。此外,所使用的幻数 4
至少没有意义,因为您试图将包含 5
元素的数组传递给函数。
该函数应使用第二个参数声明,该参数指定传递的数组中的元素数。这个函数声明
int function(int array2[5]);
并不意味着传递给函数的数组恰好有 5
个元素。编译器会将函数的参数声明调整为指向数组元素类型的指针,如
int function(int *array2);
在主语句中
int answer;
answer[5]=function(array[5]);
您正在对标量类型的对象使用下标运算符 int
。所以编译器会发出错误信息。
这是一个演示程序,展示了如何定义函数。
#include <stdio.h>
void function( int a[], size_t n )
{
for ( ; n--; ++a )
{
++*a;
}
}
int main(void)
{
int a[] = { 1, 2, 3, 4, 5 };
const size_t N = sizeof( a ) / sizeof( *a );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
function( a, N );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
return 0;
}
程序输出为
1 2 3 4 5
2 3 4 5 6